diff --git a/agentic-sap-workflows/ABAP/Z_CREATE_ONLINE_ORDER_IDOC_ABAPCODE.abap b/agentic-sap-workflows/ABAP/Z_CREATE_ONLINE_ORDER_IDOC_ABAPCODE.abap
new file mode 100644
index 0000000..45d92fc
--- /dev/null
+++ b/agentic-sap-workflows/ABAP/Z_CREATE_ONLINE_ORDER_IDOC_ABAPCODE.abap
@@ -0,0 +1,330 @@
+
+FUNCTION z_create_onlineorder_idoc.
+*"----------------------------------------------------------------------
+*"*"Local Interface:
+*" IMPORTING
+*" VALUE(IV_DIRECTION) TYPE CHAR01 DEFAULT 'O'
+*" VALUE(IV_IDOCTYP) TYPE EDI_IDOCTP DEFAULT 'ZONLINEORDERIDOC'
+*" VALUE(IV_MESTYP) TYPE EDIDC-MESTYP DEFAULT 'ZONLINEORDER'
+*" VALUE(IV_SEGTP) TYPE EDIHSEGTYP DEFAULT 'ZONLINEORDER'
+*" VALUE(IV_SNDPRT) TYPE EDIDC-SNDPRT OPTIONAL
+*" VALUE(IV_SNDPRN) TYPE EDIDC-SNDPRN OPTIONAL
+*" VALUE(IV_RCVPRT) TYPE EDIDC-RCVPRT OPTIONAL
+*" VALUE(IV_RCVPRN) TYPE EDIDC-RCVPRN OPTIONAL
+*" VALUE(IV_RCVPOR) TYPE EDIDC-RCVPOR OPTIONAL
+*" EXPORTING
+*" VALUE(EV_DOCNUM) TYPE EDIDC-DOCNUM
+*" TABLES
+*" IT_CSV STRUCTURE ZTY_CSV_LINE
+*" ET_RETURN STRUCTURE BAPIRET2
+*" ET_DOCNUMS TYPE ZTY_DOCNUM_TT
+*"----------------------------------------------------------------------
+
+ DATA: ls_ret TYPE bapiret2.
+
+ " --- Validate direction once
+ IF iv_direction <> 'I' AND iv_direction <> 'O'.
+ CLEAR ls_ret.
+ ls_ret-type = 'E'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '002'.
+ ls_ret-message = 'IV_DIRECTION must be I (inbound) or O (outbound).'.
+ ls_ret-message_v1 = 'I'.
+ ls_ret-message_v2 = 'O'.
+ APPEND ls_ret TO et_return.
+ RETURN.
+ ENDIF.
+
+ " --- Ensure we have at least one row
+ IF it_csv[] IS INITIAL.
+ CLEAR ls_ret.
+ ls_ret-type = 'E'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '003'.
+ ls_ret-message = 'IT_CSV must contain at least one line.'.
+ APPEND ls_ret TO et_return.
+ RETURN.
+ ENDIF.
+
+ " ====================================================================
+ " Main loop: each IT_CSV-LINE is one CSV record
+ " ====================================================================
+ DATA: lv_idx TYPE i VALUE 0.
+
+ LOOP AT it_csv INTO DATA(wa_csv).
+ lv_idx = lv_idx + 1.
+
+ DATA(lv_csv) = CONV string( wa_csv-line ). " ZTY_CSV_LINE-LINE is CHAR2048
+
+ " --- Parse CSV into 14 tokens (quotes, commas-in-quotes, "" escape)
+ TYPES: string_tt TYPE STANDARD TABLE OF string WITH EMPTY KEY.
+ DATA: lt_tokens TYPE string_tt,
+ lv_len TYPE i, lv_pos TYPE i, lv_inq TYPE c LENGTH 1,
+ lv_c TYPE c LENGTH 1, lv_buf TYPE string.
+
+ CLEAR: lt_tokens, lv_buf, lv_inq.
+ lv_len = strlen( lv_csv ).
+ lv_pos = 0.
+
+ WHILE lv_pos < lv_len.
+ lv_c = lv_csv+lv_pos(1).
+ IF lv_c = '"'.
+ IF lv_inq IS INITIAL.
+ lv_inq = 'X'.
+ ELSE.
+ DATA(lv_next) = lv_pos + 1.
+ IF lv_next < lv_len AND lv_csv+lv_next(1) = '"'.
+ CONCATENATE lv_buf '"' INTO lv_buf.
+ lv_pos = lv_pos + 1.
+ ELSE.
+ CLEAR lv_inq.
+ ENDIF.
+ ENDIF.
+ ELSEIF lv_c = ',' AND lv_inq IS INITIAL.
+ APPEND lv_buf TO lt_tokens.
+ CLEAR lv_buf.
+ ELSE.
+ CONCATENATE lv_buf lv_c INTO lv_buf.
+ ENDIF.
+ lv_pos = lv_pos + 1.
+ ENDWHILE.
+ APPEND lv_buf TO lt_tokens.
+
+ IF lines( lt_tokens ) <> 14.
+ CLEAR ls_ret.
+ ls_ret-type = 'E'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '032'.
+ ls_ret-message = |Row { lv_idx }: CSV must contain exactly 14 comma-separated values.| .
+ APPEND ls_ret TO et_return.
+ CONTINUE.
+ ENDIF.
+
+ " --- Map tokens
+ DATA: lv_order_id TYPE string,
+ lv_order_date_text TYPE string,
+ lv_customer_id TYPE string,
+ lv_product TYPE string,
+ lv_quantity_txt TYPE string,
+ lv_unit_price_txt TYPE string,
+ lv_ship_addr TYPE string,
+ lv_pay_method TYPE string,
+ lv_order_status TYPE string,
+ lv_tracking TYPE string,
+ lv_items_in_cart_txt TYPE string,
+ lv_coupon_code TYPE string,
+ lv_ref_source TYPE string,
+ lv_total_price_txt TYPE string.
+
+ READ TABLE lt_tokens INDEX 1 INTO lv_order_id.
+ READ TABLE lt_tokens INDEX 2 INTO lv_order_date_text.
+ READ TABLE lt_tokens INDEX 3 INTO lv_customer_id.
+ READ TABLE lt_tokens INDEX 4 INTO lv_product.
+ READ TABLE lt_tokens INDEX 5 INTO lv_quantity_txt.
+ READ TABLE lt_tokens INDEX 6 INTO lv_unit_price_txt.
+ READ TABLE lt_tokens INDEX 7 INTO lv_ship_addr.
+ READ TABLE lt_tokens INDEX 8 INTO lv_pay_method.
+ READ TABLE lt_tokens INDEX 9 INTO lv_order_status.
+ READ TABLE lt_tokens INDEX 10 INTO lv_tracking.
+ READ TABLE lt_tokens INDEX 11 INTO lv_items_in_cart_txt.
+ READ TABLE lt_tokens INDEX 12 INTO lv_coupon_code.
+ READ TABLE lt_tokens INDEX 13 INTO lv_ref_source.
+ READ TABLE lt_tokens INDEX 14 INTO lv_total_price_txt.
+
+ " --- Date parse to DATS
+ DATA: lv_order_date TYPE d,
+ lv_ok TYPE abap_bool VALUE abap_false.
+
+ IF strlen( lv_order_date_text ) = 10 AND lv_order_date_text+4(1) = '-' AND lv_order_date_text+7(1) = '-'.
+ DATA(lv_iso) = lv_order_date_text.
+ REPLACE ALL OCCURRENCES OF '-' IN lv_iso WITH ''.
+ IF strlen( lv_iso ) = 8.
+ lv_order_date = lv_iso.
+ lv_ok = abap_true.
+ ENDIF.
+ ELSEIF strlen( lv_order_date_text ) = 8 AND lv_order_date_text CO '0123456789'.
+ lv_order_date = lv_order_date_text.
+ lv_ok = abap_true.
+ ENDIF.
+
+ IF lv_ok = abap_false.
+ CALL FUNCTION 'DATE_CONV_EXT_TO_INT'
+ EXPORTING
+ i_date_ext = lv_order_date_text
+ IMPORTING
+ e_date_int = lv_order_date
+ EXCEPTIONS
+ invalid_date = 1
+ OTHERS = 2.
+ IF sy-subrc = 0.
+ lv_ok = abap_true.
+ ENDIF.
+ ENDIF.
+
+ IF lv_ok = abap_false OR lv_order_date IS INITIAL.
+ lv_order_date = sy-datum.
+ CLEAR ls_ret.
+ ls_ret-type = 'W'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '004'.
+ ls_ret-message = |Row { lv_idx }: Order date '{ lv_order_date_text }' not recognized; defaulted to SY-DATUM.|.
+ APPEND ls_ret TO et_return.
+ ENDIF.
+
+ " --- Segment fill (typed)
+ DATA: ls_seg TYPE zonlineorder.
+ CLEAR ls_seg.
+ ls_seg-order_id = lv_order_id.
+ ls_seg-order_date = lv_order_date.
+ ls_seg-customer_id = lv_customer_id.
+ ls_seg-product = lv_product.
+ WRITE lv_quantity_txt TO ls_seg-quantity.
+ WRITE lv_unit_price_txt TO ls_seg-unit_price DECIMALS 2.
+ ls_seg-ship_address = lv_ship_addr.
+ ls_seg-payment_method = lv_pay_method.
+ ls_seg-order_status = lv_order_status.
+ ls_seg-tracking_number = lv_tracking.
+ WRITE lv_items_in_cart_txt TO ls_seg-items_in_cart.
+ ls_seg-coupon_code = lv_coupon_code.
+ ls_seg-referral_source = lv_ref_source.
+ WRITE lv_total_price_txt TO ls_seg-total_price DECIMALS 2.
+
+ " --- Branch: inbound vs outbound
+ IF iv_direction = 'I'.
+ " Inbound (status 64)
+ DATA: lt_data TYPE STANDARD TABLE OF edidd WITH DEFAULT KEY,
+ ls_data TYPE edidd,
+ ls_ctrl TYPE edidc.
+ CLEAR: lt_data, ls_data, ls_ctrl.
+
+ ls_data-segnam = iv_segtp.
+ ls_data-sdata = ls_seg.
+ APPEND ls_data TO lt_data.
+
+ ls_ctrl-mestyp = iv_mestyp.
+ ls_ctrl-idoctp = iv_idoctyp.
+ ls_ctrl-direct = '2'.
+ ls_ctrl-rcvprt = 'LS'.
+ ls_ctrl-rcvprn = 'LOCAL'.
+ ls_ctrl-sndprt = 'LS'.
+ ls_ctrl-sndprn = 'LOCAL'.
+
+ CALL FUNCTION 'IDOC_INBOUND_WRITE_TO_DB'
+ TABLES
+ t_data_records = lt_data
+ CHANGING
+ pc_control_record = ls_ctrl
+ EXCEPTIONS
+ OTHERS = 1.
+
+ IF sy-subrc = 0.
+ ev_docnum = ls_ctrl-docnum.
+ CLEAR ls_ret.
+ ls_ret-type = 'S'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '010'.
+ ls_ret-message = |Row { lv_idx }: Inbound IDoc created (status 64). DOCNUM={ ev_docnum }.|.
+ APPEND ls_ret TO et_return.
+ ELSE.
+ CLEAR ls_ret.
+ ls_ret-type = 'E'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '011'.
+ ls_ret-message = |Row { lv_idx }: IDOC_INBOUND_WRITE_TO_DB failed.|.
+ APPEND ls_ret TO et_return.
+ ENDIF.
+
+ ELSE.
+
+" --- Outbound (create & dispatch all, return all DOCNUMs) -------------
+DATA: ls_ctrl_o TYPE edidc, " EDI_DC40
+ ls_data_o TYPE edidd,
+ t_ctrl_o TYPE STANDARD TABLE OF edidc WITH DEFAULT KEY,
+ t_data_o TYPE STANDARD TABLE OF edidd WITH DEFAULT KEY.
+
+CLEAR: ls_ctrl_o, ls_data_o.
+CLEAR: t_ctrl_o, t_data_o.
+
+" Segment record
+ls_data_o-segnam = iv_segtp. " <-- ensure consistency: IV_SEGTYP vs IV_SEGTP
+ls_data_o-sdata = ls_seg.
+APPEND ls_data_o TO t_data_o.
+
+" Control record (outbound)
+ls_ctrl_o-mestyp = iv_mestyp.
+ls_ctrl_o-idoctp = iv_idoctyp.
+ls_ctrl_o-direct = '1'.
+ls_ctrl_o-sndprt = COND #( WHEN iv_sndprt IS INITIAL THEN 'LS' ELSE iv_sndprt ).
+ls_ctrl_o-sndprn = COND #( WHEN iv_sndprn IS INITIAL THEN 'LOCAL' ELSE iv_sndprn ).
+ls_ctrl_o-rcvprt = COND #( WHEN iv_rcvprt IS INITIAL THEN 'LS' ELSE iv_rcvprt ).
+ls_ctrl_o-rcvprn = COND #( WHEN iv_rcvprn IS INITIAL THEN 'LOCAL' ELSE iv_rcvprn ).
+ls_ctrl_o-rcvpor = iv_rcvpor.
+
+" Append control to the comm table BEFORE calling the FM
+APPEND ls_ctrl_o TO t_ctrl_o.
+
+" Create IDoc(s) → status 30
+CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
+ EXPORTING
+ master_idoc_control = ls_ctrl_o
+ TABLES
+ communication_idoc_control = t_ctrl_o
+ master_idoc_data = t_data_o
+ EXCEPTIONS
+ error_in_idoc_control = 1
+ error_writing_idoc_status = 2
+ error_in_idoc_data = 3
+ sending_logical_system_unknown = 4
+ OTHERS = 5.
+
+IF sy-subrc = 0.
+
+ " Collect all DOCNUMs from t_ctrl_o
+ REFRESH et_docnums.
+ CLEAR ev_docnum.
+
+ LOOP AT t_ctrl_o INTO ls_ctrl_o WHERE docnum IS NOT INITIAL.
+ APPEND ls_ctrl_o-docnum TO et_docnums. " et_docnums is STANDARD TABLE OF EDI_DOCNUM
+ ev_docnum = ls_ctrl_o-docnum. " keep last for convenience
+ ENDLOOP.
+
+ " Optional: dispatch each IDoc immediately (avoid status 30)
+ "LOOP AT et_docnums ASSIGNING FIELD-SYMBOL( From: Emmanuel
+Abram-Profeta Sent: Thursday,
+January 22, 2026 5:45 PM To: Emmanuel
+Abram-Profeta Subject: Analysis 1. Order Status
+Trend (Shipped, Delivered, Returned, Cancelled, Pending): - Shipped
+Orders: - Majority of the orders were successfully shipped
+(e.g., phones, desks), indicating efficient logistics for in-stock products. - Returned
+Orders: - Consumer electronics like monitors, laptops, and
+tablets had higher tendencies to be returned. - Cancelled Orders:
+- These were minimal, typically seen for higher-price items like tablets and
+phones. - Pending Orders: - A few orders, especially mid-2024 and
+early 2023, were in pending status. This points to potential payment or
+logistical bottlenecks during this period. 2. Product Trends: 3. Price Trends: 4. Customer Payment Methods: 5. Seasonality & Time Patterns: 6. Referral Sources: 2. Order Status Improvements Needed: 3. Discount Strategies: 4. Revenue Forecast (20242025): 5. Shipping and Logistics: 6. Seasonal Marketing Push: From: Emmanuel
+Abram-Profeta Sent: Saturday,
+February 14, 2026 11:36 AM To: Emmanuel
+Abram-Profeta Subject: Analysis After excluding the specified `OrderIDs`, the remaining data in the dataset
+includes the orders with the following observations. Below is an analysis based
+on the filtered dataset: 4. Payment Method Trends: Would
+you like me to further refine the analysis based on specific metrics (e.g.,
+profitability per product, customer segmentation)? Let me know! From: Emmanuel
+Abram-Profeta Sent: Thursday,
+January 22, 2026 5:44 PM To: Emmanuel
+Abram-Profeta Subject: CSV
+document from SAP contains invalid data Validation Summary Validation results based
+ on rules: PaymentMethod exists, PaymentMethod not "Cash",
+ OrderStatus != "Cancelled", CouponCode non-empty, OrderID unique
+ (Date not validated) OrderID PaymentMethod exists PaymentMethod not
+ "Cash" OrderStatus !=
+ "Cancelled" CouponCode non-empty OrderID unique Overall Notes ORD200000 Pass Pass Pass Pass Fail Fail Duplicate
+ OrderID appears twice. ORD200001 Pass Pass Pass Pass Fail Fail Duplicate
+ OrderID appears twice. ORD200002 Pass Pass Fail Pass Fail Fail OrderStatus
+ is "Cancelled" and OrderID duplicated. ORD200003 Pass Pass Pass Pass Pass Pass ORD200004 Pass Pass Pass Pass Pass Pass ORD200005 Pass Pass Pass Pass Pass Pass ORD200006 Pass Pass Pass Pass Pass Pass ORD200007 Pass Fail Pass Pass Pass Fail PaymentMethod
+ cannot be "Cash". ORD200008 Pass Pass Fail Fail Pass Fail OrderStatus
+ is "Cancelled" and CouponCode is empty. ORD200009 Pass Pass Pass Pass Pass Pass ORD200010 Pass Pass Pass Pass Pass Pass ORD200011 Pass Pass Pass Pass Pass Pass ORD200012 Pass Pass Pass Pass Pass Pass ORD200013 Pass Pass Pass Pass Pass Pass ORD200014 Pass Pass Pass Pass Pass Pass ORD200015 Pass Fail Pass Fail Pass Fail PaymentMethod
+ cannot be "Cash" and CouponCode is empty. Invalid order ids: ORD200000,ORD200001,ORD200002,ORD200007,ORD200008,ORD200015 CSV payload: ORD200000,1/4/2023,C72649,Monitor,5,570.62,928 Main
+St,Debit Card,Shipped,TRK37947903,7,SAVE10,Instagram,2853.1
+ORD200001,8/23/2024,C75739,Phone,2,151.35,823 Main
+St,Online,Shipped,TRK91186779,3,SAVE10,Referral,302.7
+ORD200002,2/27/2024,C81728,Tablet,5,550.68,512 Main St,Credit
+Card,Cancelled,TRK42903982,8,FREESHIP,Email,2753.4
+ORD200000,1/4/2023,C72649,Monitor,5,570.62,928 Main St,Debit
+Card,Shipped,TRK37947903,7,SAVE10,Instagram,2853.1
+ORD200001,8/23/2024,C75739,Phone,2,151.35,823 Main St,Online,Shipped,TRK91186779,3,SAVE10,Referral,302.7
+ORD200002,2/27/2024,C81728,Tablet,5,550.68,512 Main St,Credit
+Card,Cancelled,TRK42903982,8,FREESHIP,Email,2753.4
+ORD200007,5/12/2023,C41460,Monitor,5,149.55,706 Main
+St,Cash,Shipped,TRK78809193,9,FREESHIP,Facebook,747.75
+ORD200008,4/2/2025,C26817,Phone,2,134.28,904 Main St,Gift
+Card,Cancelled,TRK61042692,2,,Email,268.56
+ORD200015,7/17/2023,C39416,Printer,1,473.96,942 Main
+St,Cash,Delivered,TRK54930938,3,,Google,473.96 From: Emmanuel
+Abram-Profeta Sent: Saturday,
+February 14, 2026 11:35 AM To: Emmanuel
+Abram-Profeta Subject: CSV
+document from SAP contains invalid data Validation Summary OrderID PaymentMethod Exists PaymentMethod Not
+ "Cash" OrderStatus Not
+ "Cancelled" CouponCode Present OrderID Unique Overall Notes ORD200000 Yes Yes Yes Yes No Fail Duplicate
+ OrderID appears twice. ORD200001 Yes Yes Yes Yes No Fail Duplicate
+ OrderID appears twice. ORD200002 Yes Yes No Yes No Fail Cancelled
+ status and duplicate OrderID. ORD200003 Yes Yes Yes Yes Yes Pass ORD200004 Yes Yes Yes Yes Yes Pass ORD200005 Yes Yes Yes Yes Yes Pass ORD200006 Yes Yes Yes Yes Yes Pass ORD200007 Yes No Yes Yes Yes Fail PaymentMethod
+ is "Cash". ORD200008 Yes Yes No No Yes Fail Cancelled
+ status and empty CouponCode. ORD200009 Yes Yes Yes Yes Yes Pass ORD200010 Yes Yes Yes Yes Yes Pass ORD200011 Yes Yes Yes Yes Yes Pass ORD200012 Yes Yes Yes Yes Yes Pass ORD200013 Yes Yes Yes Yes Yes Pass ORD200014 Yes Yes Yes Yes Yes Pass ORD200015 Yes No Yes No Yes Fail PaymentMethod
+ is "Cash" and empty CouponCode. Invalid order ids: ORD200000,ORD200001,ORD200002,ORD200007,ORD200008,ORD200015 CSV payload: ORD200000,1/4/2023,C72649,Monitor,5,570.62,928 Main
+St,Debit Card,Shipped,TRK37947903,7,SAVE10,Instagram,2853.1
+ORD200001,8/23/2024,C75739,Phone,2,151.35,823 Main
+St,Online,Shipped,TRK91186779,3,SAVE10,Referral,302.7
+ORD200002,2/27/2024,C81728,Tablet,5,550.68,512 Main St,Credit
+Card,Cancelled,TRK42903982,8,FREESHIP,Email,2753.4
+ORD200000,1/4/2023,C72649,Monitor,5,570.62,928 Main St,Debit
+Card,Shipped,TRK37947903,7,SAVE10,Instagram,2853.1
+ORD200001,8/23/2024,C75739,Phone,2,151.35,823 Main St,Online,Shipped,TRK91186779,3,SAVE10,Referral,302.7
+ORD200002,2/27/2024,C81728,Tablet,5,550.68,512 Main St,Credit
+Card,Cancelled,TRK42903982,8,FREESHIP,Email,2753.4
+ORD200007,5/12/2023,C41460,Monitor,5,149.55,706 Main
+St,Cash,Shipped,TRK78809193,9,FREESHIP,Facebook,747.75
+ORD200008,4/2/2025,C26817,Phone,2,134.28,904 Main St,Gift
+Card,Cancelled,TRK61042692,2,,Email,268.56
+ORD200015,7/17/2023,C39416,Printer,1,473.96,942 Main
+St,Cash,Delivered,TRK54930938,3,,Google,473.96 From: Emmanuel
+Abram-Profeta Sent: Sunday,
+February 15, 2026 12:41 AM To: Emmanuel
+Abram-Profeta Subject: CSV
+document from SAP contains invalid data Validation Summary Validation rules applied from /Shared
+Documents/SAPBlogMaterial/DemoArtifacts/ValidationRules.txt: Dataset stats: Total rows = 19; Passed rows = 10; Failed rows = 9; Distinct
+OrderIDs failing = 6. OrderID Number of Rows Affected Failed Rules ORD200000 2 OrderID
+ must be unique in the CSV array (duplicate OrderID appears multiple times). ORD200001 2 OrderID
+ must be unique in the CSV array (duplicate OrderID appears multiple times). ORD200002 2 OrderStatus
+ must be different from "Cancelled"; OrderID must be unique in the
+ CSV array. ORD200007 1 PaymentMethod
+ cannot be "Cash". ORD200008 1 OrderStatus
+ must be different from "Cancelled"; CouponCode must have at least 1
+ character. ORD200015 1 PaymentMethod
+ cannot be "Cash"; CouponCode must have at least 1 character. Failed OrderIDs (CSV):
+ORD200000,ORD200001,ORD200002,ORD200007,ORD200008,ORD200015 Note: The invalid CSV rows for the failed OrderIDs are provided as a
+separate CSV (original rows, no header). Invalid order ids: ORD200000,ORD200001,ORD200002,ORD200007,ORD200008,ORD200015 CSV payload: ORD200000,1/4/2023,C72649,Monitor,5,570.62,928 Main
+St,Debit Card,Shipped,TRK37947903,7,SAVE10,Instagram,2853.1
+ORD200001,8/23/2024,C75739,Phone,2,151.35,823 Main
+St,Online,Shipped,TRK91186779,3,SAVE10,Referral,302.7
+ORD200002,2/27/2024,C81728,Tablet,5,550.68,512 Main St,Credit
+Card,Cancelled,TRK42903982,8,FREESHIP,Email,2753.4
+ORD200000,1/4/2023,C72649,Monitor,5,570.62,928 Main St,Debit
+Card,Shipped,TRK37947903,7,SAVE10,Instagram,2853.1
+ORD200001,8/23/2024,C75739,Phone,2,151.35,823 Main St,Online,Shipped,TRK91186779,3,SAVE10,Referral,302.7
+ORD200002,2/27/2024,C81728,Tablet,5,550.68,512 Main St,Credit
+Card,Cancelled,TRK42903982,8,FREESHIP,Email,2753.4
+ORD200007,5/12/2023,C41460,Monitor,5,149.55,706 Main
+St,Cash,Shipped,TRK78809193,9,FREESHIP,Facebook,747.75
+ORD200008,4/2/2025,C26817,Phone,2,134.28,904 Main St,Gift
+Card,Cancelled,TRK61042692,2,,Email,268.56
+ORD200015,7/17/2023,C39416,Printer,1,473.96,942 Main
+St,Cash,Delivered,TRK54930938,3,,Google,473.96 @{outputs('Format_markdown_to_html')['html']}Analysis of Trends
+and Predictions
+
+Data Cleaned:
+Orders Excluded (ORD200000, ORD200001, ORD200002, ORD200007, ORD200008,
+ORD200015)
+
+
+
+Key Trends
+
+
+- Most Frequently Purchased Products:
+- Monitor, Phones, and Tablets accounted for the highest
+demand, purchased in bulk quantities (e.g., monitors purchased in quantities of
+3-5 per order).
+- High-ticket Items:
+- Computers (e.g., laptops) and printers contributed disproportionately high
+revenues despite being ordered in smaller quantities.
+- High-ticket items like tablets ($625.97, $550.68) and laptops ($664.42) drive
+significant revenue.
+- Accessories, such as chairs or monitors with lower price points
+($49.14$570.62), were sold in bulk but contributed less per order.
+- Discounts (e.g., coupons like SAVE10 or FREESHIP)
+likely stimulated these sales volumes, as seen frequently throughout 20232024.
+- Credit cards and debit cards dominate the payment methods (~70% of
+transactions).
+- There's minimal use of Gift Cards or Cash for
+transactional purposes.
+- High demand observed around October 2023 and late Q3/Q4 periods,
+which aligns with pre-holiday and holiday seasons.
+- Orders peak around August and October, potentially tied to back-to-school
+shopping and year-end discounts.
+- Social Media (Instagram and Facebook) generated
+significant customer referrals.
+- Other notable sources included Email campaigns and Google search,
+reflecting effective marketing efforts across digital channels.
+
+Predictions:
+
+
+1. Product Demand:
+- Phones and Tablets will continue to drive demand as
+customers maintain high interest in these portable electronics. It's likely
+that Monitors will also experience sustained growth due to
+work-from-home and gaming trends.
+- Laptops may contribute to large sales spikes during
+back-to-school sales in August 2024 and the holiday season.
+- Returns and cancellations primarily involve laptops and tablets,
+signaling a potential dissatisfaction with either product quality or mismatch
+expectations. Improving these areas (e.g., refined product descriptions) can
+minimize cancellations/returns.
+- Coupons like SAVE10 or FREESHIP have shown effectiveness
+in driving bulk purchases for low-to-mid-priced items; marketing efforts using
+similar coupons should yield positive returns.
+- Consider introducing seasonal coupons (e.g., WINTER15)
+around holiday periods to boost sales momentum.
+- Based on current patterns, 2024 Q3/Q4 sales revenues are expected to rise,
+driven by phone and monitor sales.
+- Continued growth can be expected if marketing pushes emphasize product
+categories already performing well.
+- Efficient performance in shipments should foster repeat customers. However, pending and
+returned orders should be minimized through proactive customer
+service interventions.
+- Focus advertisements on prominent Referral Sources: Instagram and Email.
+Crafting targeted campaigns for high-demand periods in Q3 and Q4 of each year
+will maximize engagement and conversion rates.Cleaned Dataset:
+
+
+| OrderID | Date | CustomerID | Product | Quantity | UnitPrice |
+ShippingAddress | PaymentMethod | OrderStatus | TrackingNumber | ItemsInCart |
+CouponCode | ReferralSource | TotalPrice |
+|-------------|------------|------------|-----------|----------|-----------|-----------------|---------------|-------------|----------------|-------------|------------|----------------|------------|
+| ORD200003 | 10/15/2023 | C33540 | Chair | 1 | 273.19 | 275 Main St | Debit
+Card | Returned | TRK62788070 | 5 | SAVE10 | Facebook | 273.19 |
+| ORD200004 | 5/8/2025 | C81840 | Printer | 4 | 626.01 | 668 Main St | Online |
+Delivered | TRK29241424 | 8 | SAVE10 | Email | 2504.04 |
+| ORD200005 | 10/23/2023 | C37249 | Phone | 2 | 245.86 | 934 Main St | Credit
+Card | Shipped | TRK72976927 | 4 | SAVE10 | Instagram | 491.72 |
+| ORD200009 | 11/21/2023 | C31946 | Desk | 4 | 509.38 | 102 Main St | Credit
+Card | Shipped | TRK33478363 | 6 | SAVE10 | Google | 2037.52 |
+| ORD200010 | 12/29/2023 | C43443 | Tablet | 5 | 625.97 | 333 Main St | Credit
+Card | Returned | TRK98859248 | 9 | WINTER15 | Instagram | 3129.85 |
+| ORD200011 | 2/17/2024 | C93861 | Monitor | 3 | 49.14 | 831 Main St | Online |
+Returned | TRK48234646 | 7 | SAVE10 | Email | 147.42 |
+| ORD200012 | 10/15/2024 | C38785 | Monitor | 2 | 180.5 | 179 Main St | Debit
+Card | Pending | TRK20419991 | 6 | FREESHIP | Referral | 361 |
+| ORD200013 | 8/30/2023 | C88348 | Laptop | 3 | 201.49 | 903 Main St | Credit
+Card | Returned | TRK81913874 | 4 | FREESHIP | Facebook | 604.47 |
+| ORD200014 | 3/27/2023 | C98474 | Tablet | 2 | 393.33 | 980 Main St | Debit
+Card | Pending | TRK79186539 | 3 | SAVE10 | Instagram | 786.66 |
+
+Observed Trends:
+
+
+1. Order Status Distribution:
+- Delivered: 1 order
+- Shipped: 2 orders
+- Returned: 4 orders
+- Pending: 2 orders
+- There is a relatively high proportion (44.44%) of orders that were returned.
+This could indicate potential issues with product quality, customer
+satisfaction, or other logistical issues.
+
+2. Top Products Ordered:
+- Most Ordered Product Categories:
+- Tablets and Monitors are popular products with 7 units
+ordered.
+- Phones and Desks are also moderately popular with 6 and
+4 units ordered, respectively.
+
+3. Popular Coupon Codes and Referral Sources:
+- The most used coupon code is "SAVE10," accounting for 6/9 (~67%) of
+all coupons used.
+- Referral sources indicate that Instagram and Facebook are key marketing channels,
+with 2 and 2 respective referrals found in this dataset.
+- Credit Card: 4 orders
+- Debit Card: 3 orders
+- Online: 2 orders
+- Others: No Cash purchases were made after excluding certain orders;
+indicating low cash transaction preference.
+
+5. Total Revenue:
+- The revenue from orders amounted to $9,335.90.
+
+Predictions and
+Insights:
+
+
+1. The relatively high return rate (44.44%) indicates
+that efforts might be needed to assess product quality or better match customer
+expectations with reality (e.g., product descriptions or images).
+2. Instagram, Email, and Facebook referrals are responsible
+for most traffic. Focusing marketing campaigns on these platforms continues to
+be a good strategy to attract customers.
+3. The SAVE10 coupon code is the most popular among customers.
+Expanding the usage of similar promotions like SAVE15 or introducing
+customer-specific loyalty programs could drive more sales.
+4. The presence of returned chairs, tablets, laptops, and monitors suggests potential
+issues with these products. Detailed user surveys or longer
+return policies may improve customer retention.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSV Payload
+Validation Summary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Validation Summary
@{agentParameters('Validation summary')}
Invalid order ids:
@{agentParameters('InvalidOrderIds')}
CSV payload:
@{agentParameters('Invalid CSV payload')}
", + "Importance": "Normal" + }, + "path": "/v2/Mail" + }, + "runAfter": { + "Invalid_CSV_payload": [ + "SUCCEEDED" + ] + } + }, + "[RFC]_Create_all_IDocs": { + "type": "ServiceProvider", + "inputs": { + "parameters": { + "inputBodyType": "XML", + "rfcName": "Z_CREATE_ONLINEORDER_IDOC", + "outputBodyType": "XML", + "body": " blocks clean)\nconst escapeHtml = s => s.replace(/[&<>\"]/g, c => ({'&':'&','<':'<','>':'>','\"':'"'}[c]));\n\n// Normalize line endings\nlet md = raw; // raw.replace(/\\r\\n/g, '\\n').trim();\n\n// Convert code blocks (``` ... ```)\nmd = md.replace(/```([\\s\\S]*?)```/g, (m, p1) => `${escapeHtml(p1)}
`);\n\n// Horizontal rules --- or ***\n//md = md.replace(/(?:^|\\n)---+(?:\\n|$)/g, '\\n
\\n');\nmd = md.replace(/(?:^|\\n)---+(?:\\n|$)/g, '
');\n\n// Headings ###### to #\nfor (let i = 6; i >= 1; i--) {\n const re = new RegExp(`(?:^|\\\\n)${'#'.repeat(i)}\\\\s+(.+?)\\\\s*(?=\\\\n|$)`, 'g');\n //md = md.replace(re, (m, p1) => `\\n${p1.trim()} `);\n md = md.replace(re, (m, p1) => `${p1.trim()} `);\n}\n\n// Bold and italic\nmd = md.replace(/\\*\\*([^*]+)\\*\\*/g, '$1');\nmd = md.replace(/\\*([^*]+)\\*/g, '$1');\n\n// Unordered lists (lines starting with -, *, +)\nmd = md.replace(/(?:^|\\n)([-*+]\\s.+(?:\\n[-*+]\\s.+)*)/g, (m) => {\n const items = m.trim().split(/\\n/).map(l => l.replace(/^[-*+]\\s+/, '').trim());\n //return '\\n\\n' + items.map(i => `- ${i}
`).join('\\n') + '\\n
';\n return '\\n' + items.map(i => `- ${i}
`).join('\\n') + '
';\n});\n\n// Paragraphs: wrap remaining text blocks in ...
\nconst blocks = md.split(/\\n{2,}/).map(b => {\n if (/^|^|^
|^
/.test(b.trim())) return b;\n return `${b.replace(/\\n/g, '
')}
`;\n});\n//const html = blocks.join('\\n');\nconst html = blocks.join('');\n\nreturn { html };\n"
+ },
+ "runAfter": {
+ "Extract_analysis": [
+ "SUCCEEDED"
+ ]
+ }
+ }
+ },
+ "runAfter": {
+ "Analyze_data": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Parse_Z_GET_ORDERS_ANALYSIS_request": {
+ "type": "XmlParse",
+ "inputs": {
+ "content": "@triggerBody()?['content']",
+ "schema": {
+ "source": "LogicApp",
+ "name": "Z_GET_ORDERS_ANALYSIS.xsd"
+ },
+ "xmlReaderSettings": {
+ "dtdProcessing": "Prohibit",
+ "xmlNormalization": true,
+ "ignoreWhitespace": true,
+ "ignoreProcessingInstructions": true
+ },
+ "jsonWriterSettings": {
+ "ignoreAttributes": true,
+ "useFullyQualifiedNames": false
+ }
+ },
+ "runAfter": {
+ "Validate_requested_action": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Analyze_data": {
+ "type": "ApiConnection",
+ "inputs": {
+ "host": {
+ "connection": {
+ "referenceName": "azureopenai-2"
+ }
+ },
+ "method": "post",
+ "body": {
+ "messages": [
+ {
+ "role": "system",
+ "content": "You are a data analyst. Analyze the following dataset and provide trends and predictions. Do not include the rows corresponding to the excluded orderids in the analysis."
+ },
+ {
+ "role": "user",
+ "content": "@{outputs('Create_CSV_payload')}"
+ },
+ {
+ "role": "user",
+ "content": "Excluded orderids: @{join(variables('ArrayOfInvalidOrderIDs'),',')}"
+ }
+ ],
+ "temperature": 1,
+ "top_p": 1,
+ "stream": false,
+ "max_tokens": 16384,
+ "presence_penalty": 0,
+ "frequency_penalty": 0,
+ "n": 1,
+ "seed": 0,
+ "logprobs": false,
+ "response_format": {
+ "type": "text"
+ }
+ },
+ "path": "/2024-02-15-preview/deployments/@{encodeURIComponent('gpt-4o-5')}/chat/completions",
+ "queries": {
+ "api-version": "2025-01-01-preview"
+ }
+ },
+ "runAfter": {
+ "Data_Validation_Agent": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Create_CSV_payload": {
+ "type": "Compose",
+ "inputs": "@join(variables('CSVPayload'),'\r\n')",
+ "runAfter": {
+ "For_each_CSV_row": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "For_each_CSV_row": {
+ "type": "foreach",
+ "foreach": "@outputs('Parse_Z_GET_ORDERS_ANALYSIS_request')?['body']?['json']?['IT_CSV']",
+ "actions": {
+ "Append_to_CSV_payload": {
+ "type": "AppendToArrayVariable",
+ "inputs": {
+ "name": "CSVPayload",
+ "value": "@item()?['LINE']"
+ }
+ }
+ },
+ "runAfter": {
+ "Initialize_variables": [
+ "SUCCEEDED"
+ ]
+ },
+ "runtimeConfiguration": {
+ "concurrency": {
+ "repetitions": 1
+ }
+ }
+ },
+ "Initialize_variables": {
+ "type": "InitializeVariable",
+ "inputs": {
+ "variables": [
+ {
+ "name": "ArrayOfInvalidOrderIDs",
+ "type": "array"
+ },
+ {
+ "name": "CSVpayload",
+ "type": "array"
+ }
+ ]
+ },
+ "runAfter": {
+ "Parse_Z_GET_ORDERS_ANALYSIS_request": [
+ "SUCCEEDED"
+ ]
+ }
+ }
+ },
+ "outputs": {},
+ "triggers": {
+ "When_a_message_is_received": {
+ "type": "ServiceProvider",
+ "inputs": {
+ "parameters": {
+ "idocFormat": "MicrosoftLobNamespaceXml",
+ "DegreeOfParallelism": 1,
+ "GatewayHost": "YOURGATEWAYHOSTHERE",
+ "GatewayService": "YOURGATEWAYSERVICEHERE",
+ "ProgramId": "YOURPROGRAMIDHERE",
+ "ReceiveIDocsWithUnreleasedSegmentsV2": true,
+ "GatewayWithoutWorkProcess": false
+ },
+ "serviceProviderConfiguration": {
+ "connectionName": "sap",
+ "operationId": "SapTrigger",
+ "serviceProviderId": "/serviceProviders/sap"
+ }
+ }
+ }
+ }
+ },
+ "kind": "Stateful"
+}
\ No newline at end of file
diff --git a/agentic-sap-workflows/Workflows/AgenticSalesPredictionAndAnalysisWorkflow.json b/agentic-sap-workflows/Workflows/AgenticSalesPredictionAndAnalysisWorkflow.json
new file mode 100644
index 0000000..dcc2847
--- /dev/null
+++ b/agentic-sap-workflows/Workflows/AgenticSalesPredictionAndAnalysisWorkflow.json
@@ -0,0 +1,673 @@
+{
+ "definition": {
+ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
+ "contentVersion": "1.0.0.0",
+ "actions": {
+ "Validate_requested_action": {
+ "type": "If",
+ "expression": {
+ "and": [
+ {
+ "equals": [
+ "@triggerBody()?['rfcServerContext']?['FunctionName']",
+ "Z_GET_ORDERS_ANALYSIS"
+ ]
+ }
+ ]
+ },
+ "actions": {},
+ "else": {
+ "actions": {
+ "Send_exception_to_SAP_server": {
+ "type": "ServiceProvider",
+ "inputs": {
+ "parameters": {
+ "SendExceptionToSapServerErrorMessage": "Unexpected action in request: @{triggerBody()?['rfcServerContext']?['FunctionName']}"
+ },
+ "serviceProviderConfiguration": {
+ "connectionName": "sap",
+ "operationId": "sendExceptionToSapServer",
+ "serviceProviderId": "/serviceProviders/sap"
+ }
+ }
+ },
+ "Terminate": {
+ "type": "Terminate",
+ "inputs": {
+ "runStatus": "Failed",
+ "runError": {
+ "code": "Unexpected action requested",
+ "message": "Action @{triggerBody()?['rfcServerContext']?['FunctionName']}was not expected."
+ }
+ },
+ "runAfter": {
+ "Send_exception_to_SAP_server": [
+ "SUCCEEDED"
+ ]
+ }
+ }
+ }
+ },
+ "runAfter": {}
+ },
+ "Email_analysis": {
+ "type": "ApiConnection",
+ "inputs": {
+ "host": {
+ "connection": {
+ "referenceName": "office365"
+ }
+ },
+ "method": "post",
+ "body": {
+ "To": "@parameters('EmailTo')",
+ "Subject": "Analysis",
+ "Body": "@{outputs('Format_markdown_to_html')['html']}
",
+ "Importance": "Normal"
+ },
+ "path": "/v2/Mail"
+ },
+ "runAfter": {
+ "Process_analysis_results": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Respond_to_SAP_server": {
+ "type": "ServiceProvider",
+ "inputs": {
+ "parameters": {
+ "body": "000 000000 0
@{outputs('Format_markdown_to_html')['html']}]]> "
+ },
+ "serviceProviderConfiguration": {
+ "connectionName": "sap",
+ "operationId": "respondToSapServer",
+ "serviceProviderId": "/serviceProviders/sap"
+ }
+ },
+ "runAfter": {
+ "Process_analysis_results": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Analyze_data": {
+ "type": "ApiConnection",
+ "inputs": {
+ "host": {
+ "connection": {
+ "referenceName": "azureopenai-2"
+ }
+ },
+ "method": "post",
+ "body": {
+ "messages": [
+ {
+ "role": "system",
+ "content": "You are a data analyst. Analyze the following dataset and provide trends and predictions. Do not include the rows corresponding to the excluded orderids in the analysis."
+ },
+ {
+ "role": "user",
+ "content": "@{outputs('Create_CSV_payload')}"
+ },
+ {
+ "role": "user",
+ "content": "Excluded orderids: @{join(variables('ArrayOfInvalidOrderIDs'),',')}."
+ }
+ ],
+ "temperature": 1,
+ "top_p": 1,
+ "stream": false,
+ "max_tokens": 16384,
+ "presence_penalty": 0,
+ "frequency_penalty": 0,
+ "n": 1,
+ "seed": 0,
+ "logprobs": false,
+ "response_format": {
+ "type": "text"
+ }
+ },
+ "path": "/2024-02-15-preview/deployments/@{encodeURIComponent('gpt-4o-5')}/chat/completions",
+ "queries": {
+ "api-version": "2025-01-01-preview"
+ }
+ },
+ "runAfter": {
+ "Data_Validation_Agent": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Data_Validation_Agent": {
+ "type": "Agent",
+ "inputs": {
+ "parameters": {
+ "deploymentId": "gpt-5-3",
+ "messages": [
+ {
+ "role": "system",
+ "content": "You are a data analyst. You make sure that the received CSV payload from SAP follows the validation rules.\n\nPlease follow business process:\n1) Get validation rules. Rules are defined in @{parameters('ValidationRules')}\n2) Get CSV payload\n3) Summarize the CSV payload review. Ensure that you use the validation rules from the validation document."
+ }
+ ],
+ "agentModelType": "AzureOpenAI",
+ "agentModelSettings": {
+ "agentHistoryReductionSettings": {
+ "agentHistoryReductionType": "maximumTokenCountReduction",
+ "maximumTokenCount": 128000
+ },
+ "deploymentModelProperties": {
+ "name": "gpt-5-3",
+ "format": "OpenAI",
+ "version": "2025-04-14"
+ }
+ }
+ },
+ "modelConfigurations": {
+ "model1": {
+ "referenceName": "agent-2"
+ }
+ }
+ },
+ "tools": {
+ "Get_validation_rules": {
+ "actions": {
+ "Get_validation_document": {
+ "type": "ApiConnection",
+ "inputs": {
+ "host": {
+ "connection": {
+ "referenceName": "sharepointonline"
+ }
+ },
+ "method": "get",
+ "path": "/datasets/@{encodeURIComponent(encodeURIComponent('https://microsoft.sharepoint.com/teams/LogicApps'))}/GetFileContentByPath",
+ "queries": {
+ "path": "@parameters('ValidationRules')",
+ "inferContentType": true,
+ "queryParametersSingleEncoded": true
+ }
+ }
+ }
+ },
+ "description": "Get validation rules"
+ },
+ "Get_CSV_payload": {
+ "actions": {
+ "CSV_payload": {
+ "type": "Compose",
+ "inputs": "@outputs('Create_CSV_payload')"
+ }
+ },
+ "description": "Get CSV payload",
+ "agentParameterSchema": {
+ "type": "object",
+ "properties": {
+ "CSV Payload": {
+ "type": "string",
+ "description": "The CSV payload received from SAP and that we validate based on the validation rules."
+ }
+ },
+ "required": [
+ "CSV Payload"
+ ]
+ }
+ },
+ "Summarize_CSV_payload_review": {
+ "actions": {
+ "Summary": {
+ "type": "Compose",
+ "inputs": "@agentParameters('Validation summary')"
+ },
+ "Invalid_order_ids": {
+ "type": "Compose",
+ "inputs": "@agentParameters('InvalidOrderIds')",
+ "runAfter": {
+ "Summary": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Invalid_CSV_payload": {
+ "type": "Compose",
+ "inputs": "@agentParameters('Invalid CSV payload')",
+ "runAfter": {
+ "Save_invalid_order_ids": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Save_invalid_order_ids": {
+ "type": "SetVariable",
+ "inputs": {
+ "name": "ArrayOfInvalidOrderIDs",
+ "value": "@split(agentParameters('InvalidOrderIds'), ',')"
+ },
+ "runAfter": {
+ "Invalid_order_ids": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Transform_CSV_to_XML": {
+ "type": "JavaScriptCode",
+ "inputs": {
+ "code": "const lines = workflowContext.actions.Invalid_CSV_payload.outputs.split('\\n');\n\nfunction xmlEscape(value) {\n return String(value)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\n// NOTE: we don't want to keep empty lines (which can be produced by reading the blobs)\n// the reason being that if the recipient uses a schema to validate the xml,\n// it may reject it if it does not allow empty nodes.\nconst xml = lines\n .filter(line => line && line.trim() !== '') // keep only non-empty lines\n .map(line => `${xmlEscape(line)} `)\n .join('');\n\n return { xml };"
+ },
+ "runAfter": {
+ "Send_verification_summary": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Send_verification_summary": {
+ "type": "ApiConnection",
+ "inputs": {
+ "host": {
+ "connection": {
+ "referenceName": "office365"
+ }
+ },
+ "method": "post",
+ "body": {
+ "To": "@parameters('EmailTo')",
+ "Subject": "CSV document from SAP contains invalid data",
+ "Body": "Validation Summary
@{agentParameters('Validation summary')}
Invalid order ids:
@{agentParameters('InvalidOrderIds')}
CSV payload:
@{agentParameters('Invalid CSV payload')}
",
+ "Importance": "Normal"
+ },
+ "path": "/v2/Mail"
+ },
+ "runAfter": {
+ "Invalid_CSV_payload": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "[RFC]_Create_all_IDocs": {
+ "type": "ServiceProvider",
+ "inputs": {
+ "parameters": {
+ "inputBodyType": "XML",
+ "rfcName": "Z_CREATE_ONLINEORDER_IDOC",
+ "outputBodyType": "XML",
+ "body": "\nO \nLS \nBTSSERVER \nLS \nBTSSERVER \n @{outputs('Transform_CSV_to_XML')}\n \n \n \n "
+ },
+ "serviceProviderConfiguration": {
+ "connectionName": "sap",
+ "operationId": "callRfc",
+ "serviceProviderId": "/serviceProviders/sap"
+ }
+ },
+ "runAfter": {
+ "Transform_CSV_to_XML": [
+ "SUCCEEDED"
+ ]
+ }
+ }
+ },
+ "description": "This tool will summarize the CSV payload review",
+ "agentParameterSchema": {
+ "type": "object",
+ "properties": {
+ "Validation summary": {
+ "type": "string",
+ "description": "The AI summary provided by the LLM after the CSV payload was reviewed against the validation rules.The expected format is an HTML table. Create a list of all orderids that have failed. Create a CSV document that contains the original CSV payload but only for the orderid values that failed validation, and each row on a separate line. Include title row only in the email body."
+ },
+ "InvalidOrderIds": {
+ "type": "string",
+ "description": "The orderid values contained in the AI summary provided by the LLM and that failed validation. The format is CSV."
+ },
+ "Invalid CSV payload": {
+ "type": "string",
+ "description": "The original CSV rows of the CSV payload for the orderid values that failed validation. Each row must be on a separate line. Keep the title row only for the email body and remove it otherwise."
+ }
+ },
+ "required": [
+ "Validation summary",
+ "InvalidOrderIds",
+ "Invalid CSV payload"
+ ]
+ }
+ }
+ },
+ "runAfter": {
+ "Initialize_array_of_invalid_order_ids": [
+ "SUCCEEDED"
+ ]
+ },
+ "limit": {
+ "count": 100
+ }
+ },
+ "Process_analysis_results": {
+ "type": "Scope",
+ "actions": {
+ "Parse_results": {
+ "type": "ParseJson",
+ "inputs": {
+ "content": "@body('Analyze_data')['choices'][0]",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "choices": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "content_filter_results": {
+ "type": "object",
+ "properties": {
+ "hate": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "string"
+ }
+ }
+ },
+ "protected_material_code": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "detected": {
+ "type": "boolean"
+ }
+ }
+ },
+ "protected_material_text": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "detected": {
+ "type": "boolean"
+ }
+ }
+ },
+ "self_harm": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "string"
+ }
+ }
+ },
+ "sexual": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "string"
+ }
+ }
+ },
+ "violence": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "finish_reason": {
+ "type": "string"
+ },
+ "index": {
+ "type": "integer"
+ },
+ "logprobs": {},
+ "message": {
+ "type": "object",
+ "properties": {
+ "annotations": {
+ "type": "array"
+ },
+ "content": {
+ "type": "string"
+ },
+ "refusal": {},
+ "role": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "required": [
+ "content_filter_results",
+ "finish_reason",
+ "index",
+ "logprobs",
+ "message"
+ ]
+ }
+ },
+ "created": {
+ "type": "integer"
+ },
+ "id": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "object": {
+ "type": "string"
+ },
+ "prompt_filter_results": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "prompt_index": {
+ "type": "integer"
+ },
+ "content_filter_results": {
+ "type": "object",
+ "properties": {
+ "hate": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "string"
+ }
+ }
+ },
+ "jailbreak": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "detected": {
+ "type": "boolean"
+ }
+ }
+ },
+ "self_harm": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "string"
+ }
+ }
+ },
+ "sexual": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "string"
+ }
+ }
+ },
+ "violence": {
+ "type": "object",
+ "properties": {
+ "filtered": {
+ "type": "boolean"
+ },
+ "severity": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "required": [
+ "prompt_index",
+ "content_filter_results"
+ ]
+ }
+ },
+ "system_fingerprint": {
+ "type": "string"
+ },
+ "usage": {
+ "type": "object",
+ "properties": {
+ "completion_tokens": {
+ "type": "integer"
+ },
+ "completion_tokens_details": {
+ "type": "object",
+ "properties": {
+ "accepted_prediction_tokens": {
+ "type": "integer"
+ },
+ "audio_tokens": {
+ "type": "integer"
+ },
+ "reasoning_tokens": {
+ "type": "integer"
+ },
+ "rejected_prediction_tokens": {
+ "type": "integer"
+ }
+ }
+ },
+ "prompt_tokens": {
+ "type": "integer"
+ },
+ "prompt_tokens_details": {
+ "type": "object",
+ "properties": {
+ "audio_tokens": {
+ "type": "integer"
+ },
+ "cached_tokens": {
+ "type": "integer"
+ }
+ }
+ },
+ "total_tokens": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "Extract_analysis": {
+ "type": "Compose",
+ "inputs": "@body('Parse_results')['message']['content']",
+ "runAfter": {
+ "Parse_results": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Format_markdown_to_html": {
+ "type": "JavaScriptCode",
+ "inputs": {
+ "code": "const raw = workflowContext.actions.Extract_analysis.outputs;\n\n// Basic HTML escaping for safety (keeps blocks clean)\nconst escapeHtml = s => s.replace(/[&<>\"]/g, c => ({'&':'&','<':'<','>':'>','\"':'"'}[c]));\n\n// Normalize line endings\nlet md = raw; // raw.replace(/\\r\\n/g, '\\n').trim();\n\n// Convert code blocks (``` ... ```)\nmd = md.replace(/```([\\s\\S]*?)```/g, (m, p1) => `${escapeHtml(p1)}
`);\n\n// Horizontal rules --- or ***\n//md = md.replace(/(?:^|\\n)---+(?:\\n|$)/g, '\\n
\\n');\nmd = md.replace(/(?:^|\\n)---+(?:\\n|$)/g, '
');\n\n// Headings ###### to #\nfor (let i = 6; i >= 1; i--) {\n const re = new RegExp(`(?:^|\\\\n)${'#'.repeat(i)}\\\\s+(.+?)\\\\s*(?=\\\\n|$)`, 'g');\n //md = md.replace(re, (m, p1) => `\\n${p1.trim()} `);\n md = md.replace(re, (m, p1) => `${p1.trim()} `);\n}\n\n// Bold and italic\nmd = md.replace(/\\*\\*([^*]+)\\*\\*/g, '$1');\nmd = md.replace(/\\*([^*]+)\\*/g, '$1');\n\n// Unordered lists (lines starting with -, *, +)\nmd = md.replace(/(?:^|\\n)([-*+]\\s.+(?:\\n[-*+]\\s.+)*)/g, (m) => {\n const items = m.trim().split(/\\n/).map(l => l.replace(/^[-*+]\\s+/, '').trim());\n //return '\\n\\n' + items.map(i => `- ${i}
`).join('\\n') + '\\n
';\n return '\\n' + items.map(i => `- ${i}
`).join('\\n') + '
';\n});\n\n// Paragraphs: wrap remaining text blocks in ...
\nconst blocks = md.split(/\\n{2,}/).map(b => {\n if (/^|^|^
|^
/.test(b.trim())) return b;\n return `${b.replace(/\\n/g, '
')}
`;\n});\n//const html = blocks.join('\\n');\nconst html = blocks.join('');\n\nreturn { html };\n"
+ },
+ "runAfter": {
+ "Extract_analysis": [
+ "SUCCEEDED"
+ ]
+ }
+ }
+ },
+ "runAfter": {
+ "Analyze_data": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Create_CSV_payload": {
+ "type": "Compose",
+ "inputs": "@\njoin(\n xpath(\n xml(triggerBody()?['content']),\n '/*[local-name()=\"Z_GET_ORDERS_ANALYSIS\"]/*[local-name()=\"IT_CSV\"]/*[local-name()=\"ZTY_CSV_LINE\"]/*[local-name()=\"LINE\"]/text()'\n ),\n '\r\n')\n",
+ "runAfter": {
+ "Validate_requested_action": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Initialize_array_of_invalid_order_ids": {
+ "type": "InitializeVariable",
+ "inputs": {
+ "variables": [
+ {
+ "name": "ArrayOfInvalidOrderIDs",
+ "type": "array"
+ }
+ ]
+ },
+ "runAfter": {
+ "Create_CSV_payload": [
+ "SUCCEEDED"
+ ]
+ }
+ }
+ },
+ "outputs": {},
+ "triggers": {
+ "When_a_message_is_received": {
+ "type": "ServiceProvider",
+ "inputs": {
+ "parameters": {
+ "idocFormat": "MicrosoftLobNamespaceXml",
+ "DegreeOfParallelism": 1,
+ "GatewayHost": "YOURGATEWAYHOSTHERE",
+ "GatewayService": "YOURGATEWAYSERVICEHERE",
+ "ProgramId": "YOURPROGRAMIDHERE",
+ "ReceiveIDocsWithUnreleasedSegmentsV2": true,
+ "GatewayWithoutWorkProcess": false
+ },
+ "serviceProviderConfiguration": {
+ "connectionName": "sap",
+ "operationId": "SapTrigger",
+ "serviceProviderId": "/serviceProviders/sap"
+ }
+ }
+ }
+ }
+ },
+ "kind": "Stateful"
+}
\ No newline at end of file
diff --git a/agentic-sap-workflows/Workflows/SendCustomerOrdersSpreadsheetsWorkflow.json b/agentic-sap-workflows/Workflows/SendCustomerOrdersSpreadsheetsWorkflow.json
new file mode 100644
index 0000000..6d81ed4
--- /dev/null
+++ b/agentic-sap-workflows/Workflows/SendCustomerOrdersSpreadsheetsWorkflow.json
@@ -0,0 +1,175 @@
+{
+ "definition": {
+ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
+ "contentVersion": "1.0.0.0",
+ "actions": {
+ "Read_CSV_orders_from_blob": {
+ "type": "ServiceProvider",
+ "inputs": {
+ "parameters": {
+ "containerName": "onlinestoreorders",
+ "blobName": "@parameters('DataFileName')"
+ },
+ "serviceProviderConfiguration": {
+ "connectionName": "AzureBlob",
+ "operationId": "readBlob",
+ "serviceProviderId": "/serviceProviders/AzureBlob"
+ }
+ },
+ "runAfter": {}
+ },
+ "Extract_rows": {
+ "type": "Compose",
+ "inputs": "@split(string(body('Read_CSV_orders_from_blob')?['content']), '\r\n')",
+ "runAfter": {
+ "Read_CSV_orders_from_blob": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Transform_CSV_to_XML": {
+ "type": "JavaScriptCode",
+ "inputs": {
+ "code": "const lines = workflowContext.actions.Extract_rows.outputs;\n\nfunction xmlEscape(value) {\n return String(value)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\n// NOTE: we don't want to keep empty lines (which can be produced by reading the blobs)\n// the reason being that if the recipient uses a schema to validate the xml,\n// it may reject it if it does not allow empty nodes.\nconst xml = lines\n .filter(line => line && line.trim() !== '') // keep only non-empty lines\n .map(line => `${xmlEscape(line)} `)\n .join('');\n\n return { xml };"
+ },
+ "runAfter": {
+ "Extract_rows": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "[RFC]_Call_Z_GET_ORDERS_ANALYSIS": {
+ "type": "ServiceProvider",
+ "inputs": {
+ "parameters": {
+ "inputBodyType": "XML",
+ "rfcName": "Z_GET_ORDERS_ANALYSIS",
+ "outputBodyType": "XML",
+ "body": "@{outputs('Transform_CSV_to_XML')['xml']} "
+ },
+ "serviceProviderConfiguration": {
+ "connectionName": "sap",
+ "operationId": "callRfc",
+ "serviceProviderId": "/serviceProviders/sap"
+ }
+ },
+ "runAfter": {
+ "Transform_CSV_to_XML": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Save_EXCEPTION_message": {
+ "type": "Compose",
+ "inputs": "@xpath(body('[RFC]_Call_Z_GET_ORDERS_ANALYSIS')?['content'], \r\n 'string(/*[local-name()=\"Z_GET_ORDERS_ANALYSISResponse\"]/*[local-name()=\"EXCEPTIONMSG\"])')\r\n",
+ "runAfter": {
+ "[RFC]_Call_Z_GET_ORDERS_ANALYSIS": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Save_RETURN_message": {
+ "type": "Compose",
+ "inputs": "@xpath(body('[RFC]_Call_Z_GET_ORDERS_ANALYSIS')?['content'], \r\n 'string(/*[local-name()=\"Z_GET_ORDERS_ANALYSISResponse\"]/*[local-name()=\"RETURN\"]/*[local-name()=\"MESSAGE\"])')",
+ "runAfter": {
+ "Save_EXCEPTION_message": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Has_errors": {
+ "type": "If",
+ "expression": {
+ "or": [
+ {
+ "not": {
+ "equals": [
+ "@outputs('Save_EXCEPTION_message')",
+ "ok"
+ ]
+ }
+ },
+ {
+ "equals": [
+ "@not(empty(outputs('Save_RETURN_message')))",
+ true
+ ]
+ }
+ ]
+ },
+ "actions": {
+ "Set_email_body_(failure)": {
+ "type": "SetVariable",
+ "inputs": {
+ "name": "EmailBody",
+ "value": "@concat(\r\n 'Error message: ', outputs('Save_RETURN_message'), ', details: ',\r\n xpath(body('[RFC]_Call_Z_GET_ORDERS_ANALYSIS')?['content'], 'string(//*[local-name()=\"MESSAGE_V1\"])'),\r\n xpath(body('[RFC]_Call_Z_GET_ORDERS_ANALYSIS')?['content'], 'string(//*[local-name()=\"MESSAGE_V2\"])'),\r\n xpath(body('[RFC]_Call_Z_GET_ORDERS_ANALYSIS')?['content'], 'string(//*[local-name()=\"MESSAGE_V3\"])'),\r\n xpath(body('[RFC]_Call_Z_GET_ORDERS_ANALYSIS')?['content'], 'string(//*[local-name()=\"MESSAGE_V4\"])'),\r\n '; ',\r\n 'Exception message: ', outputs('Save_EXCEPTION_message'), '.')"
+ }
+ }
+ },
+ "else": {
+ "actions": {
+ "Set_email_body_(success)": {
+ "type": "SetVariable",
+ "inputs": {
+ "name": "EmailBody",
+ "value": "@xpath(body('[RFC]_Call_Z_GET_ORDERS_ANALYSIS')?['content'], \n 'string(/*[local-name()=\"Z_GET_ORDERS_ANALYSISResponse\"]/*[local-name()=\"ANALYSIS\"])')"
+ }
+ }
+ }
+ },
+ "runAfter": {
+ "Initialize_email_body": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Send_an_email_(V2)": {
+ "type": "ApiConnection",
+ "inputs": {
+ "host": {
+ "connection": {
+ "referenceName": "office365"
+ }
+ },
+ "method": "post",
+ "body": {
+ "To": "@parameters('EmailTo')",
+ "Subject": "Received Analysis",
+ "Body": "@{variables('EmailBody')}
",
+ "Importance": "Normal"
+ },
+ "path": "/v2/Mail"
+ },
+ "runAfter": {
+ "Has_errors": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Initialize_email_body": {
+ "type": "InitializeVariable",
+ "inputs": {
+ "variables": [
+ {
+ "name": "EmailBody",
+ "type": "string"
+ }
+ ]
+ },
+ "runAfter": {
+ "Save_RETURN_message": [
+ "SUCCEEDED"
+ ]
+ }
+ }
+ },
+ "outputs": {},
+ "triggers": {
+ "When_an_HTTP_request_is_received": {
+ "type": "Request",
+ "kind": "Http"
+ }
+ }
+ },
+ "kind": "Stateful"
+}
\ No newline at end of file
diff --git a/agentic-sap-workflows/Workflows/SendCustomerOrdersWorkflow.json b/agentic-sap-workflows/Workflows/SendCustomerOrdersWorkflow.json
new file mode 100644
index 0000000..4df387f
--- /dev/null
+++ b/agentic-sap-workflows/Workflows/SendCustomerOrdersWorkflow.json
@@ -0,0 +1,72 @@
+{
+ "definition": {
+ "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
+ "contentVersion": "1.0.0.0",
+ "actions": {
+ "Read_CSV_orders_from_blob": {
+ "type": "ServiceProvider",
+ "inputs": {
+ "parameters": {
+ "containerName": "onlinestoreorders",
+ "blobName": "@parameters('DataFileName')"
+ },
+ "serviceProviderConfiguration": {
+ "connectionName": "AzureBlob",
+ "operationId": "readBlob",
+ "serviceProviderId": "/serviceProviders/AzureBlob"
+ }
+ },
+ "runAfter": {}
+ },
+ "Extract_rows": {
+ "type": "Compose",
+ "inputs": "@split(string(body('Read_CSV_orders_from_blob')?['content']), '\r\n')",
+ "runAfter": {
+ "Read_CSV_orders_from_blob": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Transform_CSV_to_XML": {
+ "type": "JavaScriptCode",
+ "inputs": {
+ "code": "const lines = workflowContext.actions.Extract_rows.outputs;\n\nfunction xmlEscape(value) {\n return String(value)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\n// NOTE: we don't want to keep empty lines (which can be produced by reading the blobs)\n// the reason being that if the recipient uses a schema to validate the xml,\n// it may reject it if it does not allow empty nodes.\nconst xml = lines\n .filter(line => line && line.trim() !== '') // keep only non-empty lines\n .map(line => `${xmlEscape(line)} `)\n .join('');\n\n return { xml };"
+ },
+ "runAfter": {
+ "Extract_rows": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "[RFC]_Create_all_IDocs": {
+ "type": "ServiceProvider",
+ "inputs": {
+ "parameters": {
+ "inputBodyType": "XML",
+ "rfcName": "Z_CREATE_ONLINEORDER_IDOC ",
+ "outputBodyType": "XML",
+ "body": "\nO \nLS \nBTSSERVER \nLS \nBTSSERVER \n @{outputs('Transform_CSV_to_XML')['xml']}\n \n \n \n "
+ },
+ "serviceProviderConfiguration": {
+ "connectionName": "sap",
+ "operationId": "callRfc",
+ "serviceProviderId": "/serviceProviders/sap"
+ }
+ },
+ "runAfter": {
+ "Transform_CSV_to_XML": [
+ "SUCCEEDED"
+ ]
+ }
+ }
+ },
+ "outputs": {},
+ "triggers": {
+ "When_an_HTTP_request_is_received": {
+ "type": "Request",
+ "kind": "Http"
+ }
+ }
+ },
+ "kind": "Stateful"
+}
\ No newline at end of file
diff --git a/agentic-sap-workflows/abapgitexported/.abapgit.xml b/agentic-sap-workflows/abapgitexported/.abapgit.xml
new file mode 100644
index 0000000..7c0506a
--- /dev/null
+++ b/agentic-sap-workflows/abapgitexported/.abapgit.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ E
+ /src/
+ PREFIX
+
+
+
diff --git a/agentic-sap-workflows/abapgitexported/src/package.devc.xml b/agentic-sap-workflows/abapgitexported/src/package.devc.xml
new file mode 100644
index 0000000..730c94d
--- /dev/null
+++ b/agentic-sap-workflows/abapgitexported/src/package.devc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ General package for Logic Apps
+
+
+
+
diff --git a/agentic-sap-workflows/abapgitexported/src/z1lis01container.idoc.xml b/agentic-sap-workflows/abapgitexported/src/z1lis01container.idoc.xml
new file mode 100644
index 0000000..09fc62d
--- /dev/null
+++ b/agentic-sap-workflows/abapgitexported/src/z1lis01container.idoc.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+ Test custom idoc for a Z1LIS01 segment type
+ X
+ 750
+ Z1LIS01CONTAINER
+ Z1LIS01CONTAINER
+
+
+
+ 0001
+ Z1PMMVIDS
+ 0000000001
+ 0000000100
+ 02
+
+
+ 0002
+ Z1MATEXT
+ 0000000001
+ 0000000100
+ 02
+
+
+ 0003
+ Z1OPER
+ X
+ 0000000001
+ 0000000100
+ 02
+
+
+ 0004
+ Z1LIS01
+ X
+ 0000000001
+ 0000000100
+ 02
+
+
+
+
+
+
diff --git a/agentic-sap-workflows/abapgitexported/src/z1text2.tabl.xml b/agentic-sap-workflows/abapgitexported/src/z1text2.tabl.xml
new file mode 100644
index 0000000..b9f8b0b
--- /dev/null
+++ b/agentic-sap-workflows/abapgitexported/src/z1text2.tabl.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+ Z1TEXT2
+ E
+ INTTAB
+ Segment type similar to Z1TEXT
+ E
+ 1
+
+
+
+ LINE
+ 0
+ C
+ 000160
+ CHAR
+ 000080
+ CHAR
+
+
+
+ -
+
+ Z1TEXT2
+ Segment type similar to Z1TEXT
+
+
+ Z1TEXT2
+ Z2TEXT2000
+ 750
+ X
+ 0001
+ 0080
+
+
+
+ Z1TEXT2
+ 0001
+ LINE
+ CHAR80
+ 0080
+
+
+
+
+
+
+
diff --git a/agentic-sap-workflows/abapgitexported/src/z_create_onlineorder_idoc.abap b/agentic-sap-workflows/abapgitexported/src/z_create_onlineorder_idoc.abap
new file mode 100644
index 0000000..6fad5ec
--- /dev/null
+++ b/agentic-sap-workflows/abapgitexported/src/z_create_onlineorder_idoc.abap
@@ -0,0 +1,329 @@
+FUNCTION z_create_onlineorder_idoc.
+*"----------------------------------------------------------------------
+*"*"Local Interface:
+*" IMPORTING
+*" VALUE(IV_DIRECTION) TYPE CHAR01 DEFAULT 'O'
+*" VALUE(IV_IDOCTYP) TYPE EDI_IDOCTP DEFAULT 'ZONLINEORDERIDOC'
+*" VALUE(IV_MESTYP) TYPE EDIDC-MESTYP DEFAULT 'ZONLINEORDER'
+*" VALUE(IV_SEGTP) TYPE EDIHSEGTYP DEFAULT 'ZONLINEORDER'
+*" VALUE(IV_SNDPRT) TYPE EDIDC-SNDPRT OPTIONAL
+*" VALUE(IV_SNDPRN) TYPE EDIDC-SNDPRN OPTIONAL
+*" VALUE(IV_RCVPRT) TYPE EDIDC-RCVPRT OPTIONAL
+*" VALUE(IV_RCVPRN) TYPE EDIDC-RCVPRN OPTIONAL
+*" VALUE(IV_RCVPOR) TYPE EDIDC-RCVPOR OPTIONAL
+*" EXPORTING
+*" VALUE(EV_DOCNUM) TYPE EDIDC-DOCNUM
+*" TABLES
+*" IT_CSV STRUCTURE ZTY_CSV_LINE
+*" ET_RETURN STRUCTURE BAPIRET2
+*" ET_DOCNUMS TYPE ZTY_DOCNUM_TT
+*"----------------------------------------------------------------------
+
+ DATA: ls_ret TYPE bapiret2.
+
+ " --- Validate direction once
+ IF iv_direction <> 'I' AND iv_direction <> 'O'.
+ CLEAR ls_ret.
+ ls_ret-type = 'E'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '002'.
+ ls_ret-message = 'IV_DIRECTION must be I (inbound) or O (outbound).'.
+ ls_ret-message_v1 = 'I'.
+ ls_ret-message_v2 = 'O'.
+ APPEND ls_ret TO et_return.
+ RETURN.
+ ENDIF.
+
+ " --- Ensure we have at least one row
+ IF it_csv[] IS INITIAL.
+ CLEAR ls_ret.
+ ls_ret-type = 'E'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '003'.
+ ls_ret-message = 'IT_CSV must contain at least one line.'.
+ APPEND ls_ret TO et_return.
+ RETURN.
+ ENDIF.
+
+ " ====================================================================
+ " Main loop: each IT_CSV-LINE is one CSV record
+ " ====================================================================
+ DATA: lv_idx TYPE i VALUE 0.
+
+ LOOP AT it_csv INTO DATA(wa_csv).
+ lv_idx = lv_idx + 1.
+
+ DATA(lv_csv) = CONV string( wa_csv-line ). " ZTY_CSV_LINE-LINE is CHAR2048
+
+ " --- Parse CSV into 14 tokens (quotes, commas-in-quotes, "" escape)
+ TYPES: string_tt TYPE STANDARD TABLE OF string WITH EMPTY KEY.
+ DATA: lt_tokens TYPE string_tt,
+ lv_len TYPE i, lv_pos TYPE i, lv_inq TYPE c LENGTH 1,
+ lv_c TYPE c LENGTH 1, lv_buf TYPE string.
+
+ CLEAR: lt_tokens, lv_buf, lv_inq.
+ lv_len = strlen( lv_csv ).
+ lv_pos = 0.
+
+ WHILE lv_pos < lv_len.
+ lv_c = lv_csv+lv_pos(1).
+ IF lv_c = '"'.
+ IF lv_inq IS INITIAL.
+ lv_inq = 'X'.
+ ELSE.
+ DATA(lv_next) = lv_pos + 1.
+ IF lv_next < lv_len AND lv_csv+lv_next(1) = '"'.
+ CONCATENATE lv_buf '"' INTO lv_buf.
+ lv_pos = lv_pos + 1.
+ ELSE.
+ CLEAR lv_inq.
+ ENDIF.
+ ENDIF.
+ ELSEIF lv_c = ',' AND lv_inq IS INITIAL.
+ APPEND lv_buf TO lt_tokens.
+ CLEAR lv_buf.
+ ELSE.
+ CONCATENATE lv_buf lv_c INTO lv_buf.
+ ENDIF.
+ lv_pos = lv_pos + 1.
+ ENDWHILE.
+ APPEND lv_buf TO lt_tokens.
+
+ IF lines( lt_tokens ) <> 14.
+ CLEAR ls_ret.
+ ls_ret-type = 'E'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '032'.
+ ls_ret-message = |Row { lv_idx }: CSV must contain exactly 14 comma-separated values.| .
+ APPEND ls_ret TO et_return.
+ CONTINUE.
+ ENDIF.
+
+ " --- Map tokens
+ DATA: lv_order_id TYPE string,
+ lv_order_date_text TYPE string,
+ lv_customer_id TYPE string,
+ lv_product TYPE string,
+ lv_quantity_txt TYPE string,
+ lv_unit_price_txt TYPE string,
+ lv_ship_addr TYPE string,
+ lv_pay_method TYPE string,
+ lv_order_status TYPE string,
+ lv_tracking TYPE string,
+ lv_items_in_cart_txt TYPE string,
+ lv_coupon_code TYPE string,
+ lv_ref_source TYPE string,
+ lv_total_price_txt TYPE string.
+
+ READ TABLE lt_tokens INDEX 1 INTO lv_order_id.
+ READ TABLE lt_tokens INDEX 2 INTO lv_order_date_text.
+ READ TABLE lt_tokens INDEX 3 INTO lv_customer_id.
+ READ TABLE lt_tokens INDEX 4 INTO lv_product.
+ READ TABLE lt_tokens INDEX 5 INTO lv_quantity_txt.
+ READ TABLE lt_tokens INDEX 6 INTO lv_unit_price_txt.
+ READ TABLE lt_tokens INDEX 7 INTO lv_ship_addr.
+ READ TABLE lt_tokens INDEX 8 INTO lv_pay_method.
+ READ TABLE lt_tokens INDEX 9 INTO lv_order_status.
+ READ TABLE lt_tokens INDEX 10 INTO lv_tracking.
+ READ TABLE lt_tokens INDEX 11 INTO lv_items_in_cart_txt.
+ READ TABLE lt_tokens INDEX 12 INTO lv_coupon_code.
+ READ TABLE lt_tokens INDEX 13 INTO lv_ref_source.
+ READ TABLE lt_tokens INDEX 14 INTO lv_total_price_txt.
+
+ " --- Date parse to DATS
+ DATA: lv_order_date TYPE d,
+ lv_ok TYPE abap_bool VALUE abap_false.
+
+ IF strlen( lv_order_date_text ) = 10 AND lv_order_date_text+4(1) = '-' AND lv_order_date_text+7(1) = '-'.
+ DATA(lv_iso) = lv_order_date_text.
+ REPLACE ALL OCCURRENCES OF '-' IN lv_iso WITH ''.
+ IF strlen( lv_iso ) = 8.
+ lv_order_date = lv_iso.
+ lv_ok = abap_true.
+ ENDIF.
+ ELSEIF strlen( lv_order_date_text ) = 8 AND lv_order_date_text CO '0123456789'.
+ lv_order_date = lv_order_date_text.
+ lv_ok = abap_true.
+ ENDIF.
+
+ IF lv_ok = abap_false.
+ CALL FUNCTION 'DATE_CONV_EXT_TO_INT'
+ EXPORTING
+ i_date_ext = lv_order_date_text
+ IMPORTING
+ e_date_int = lv_order_date
+ EXCEPTIONS
+ invalid_date = 1
+ OTHERS = 2.
+ IF sy-subrc = 0.
+ lv_ok = abap_true.
+ ENDIF.
+ ENDIF.
+
+ IF lv_ok = abap_false OR lv_order_date IS INITIAL.
+ lv_order_date = sy-datum.
+ CLEAR ls_ret.
+ ls_ret-type = 'W'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '004'.
+ ls_ret-message = |Row { lv_idx }: Order date '{ lv_order_date_text }' not recognized; defaulted to SY-DATUM.|.
+ APPEND ls_ret TO et_return.
+ ENDIF.
+
+ " --- Segment fill (typed)
+ DATA: ls_seg TYPE zonlineorder.
+ CLEAR ls_seg.
+ ls_seg-order_id = lv_order_id.
+ ls_seg-order_date = lv_order_date.
+ ls_seg-customer_id = lv_customer_id.
+ ls_seg-product = lv_product.
+ WRITE lv_quantity_txt TO ls_seg-quantity.
+ WRITE lv_unit_price_txt TO ls_seg-unit_price DECIMALS 2.
+ ls_seg-ship_address = lv_ship_addr.
+ ls_seg-payment_method = lv_pay_method.
+ ls_seg-order_status = lv_order_status.
+ ls_seg-tracking_number = lv_tracking.
+ WRITE lv_items_in_cart_txt TO ls_seg-items_in_cart.
+ ls_seg-coupon_code = lv_coupon_code.
+ ls_seg-referral_source = lv_ref_source.
+ WRITE lv_total_price_txt TO ls_seg-total_price DECIMALS 2.
+
+ " --- Branch: inbound vs outbound
+ IF iv_direction = 'I'.
+ " Inbound (status 64)
+ DATA: lt_data TYPE STANDARD TABLE OF edidd WITH DEFAULT KEY,
+ ls_data TYPE edidd,
+ ls_ctrl TYPE edidc.
+ CLEAR: lt_data, ls_data, ls_ctrl.
+
+ ls_data-segnam = iv_segtp.
+ ls_data-sdata = ls_seg.
+ APPEND ls_data TO lt_data.
+
+ ls_ctrl-mestyp = iv_mestyp.
+ ls_ctrl-idoctp = iv_idoctyp.
+ ls_ctrl-direct = '2'.
+ ls_ctrl-rcvprt = 'LS'.
+ ls_ctrl-rcvprn = 'LOCAL'.
+ ls_ctrl-sndprt = 'LS'.
+ ls_ctrl-sndprn = 'LOCAL'.
+
+ CALL FUNCTION 'IDOC_INBOUND_WRITE_TO_DB'
+ TABLES
+ t_data_records = lt_data
+ CHANGING
+ pc_control_record = ls_ctrl
+ EXCEPTIONS
+ OTHERS = 1.
+
+ IF sy-subrc = 0.
+ ev_docnum = ls_ctrl-docnum.
+ CLEAR ls_ret.
+ ls_ret-type = 'S'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '010'.
+ ls_ret-message = |Row { lv_idx }: Inbound IDoc created (status 64). DOCNUM={ ev_docnum }.|.
+ APPEND ls_ret TO et_return.
+ ELSE.
+ CLEAR ls_ret.
+ ls_ret-type = 'E'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '011'.
+ ls_ret-message = |Row { lv_idx }: IDOC_INBOUND_WRITE_TO_DB failed.|.
+ APPEND ls_ret TO et_return.
+ ENDIF.
+
+ ELSE.
+
+" --- Outbound (create & dispatch all, return all DOCNUMs) -------------
+DATA: ls_ctrl_o TYPE edidc, " EDI_DC40
+ ls_data_o TYPE edidd,
+ t_ctrl_o TYPE STANDARD TABLE OF edidc WITH DEFAULT KEY,
+ t_data_o TYPE STANDARD TABLE OF edidd WITH DEFAULT KEY.
+
+CLEAR: ls_ctrl_o, ls_data_o.
+CLEAR: t_ctrl_o, t_data_o.
+
+" Segment record
+ls_data_o-segnam = iv_segtp. " <-- ensure consistency: IV_SEGTYP vs IV_SEGTP
+ls_data_o-sdata = ls_seg.
+APPEND ls_data_o TO t_data_o.
+
+" Control record (outbound)
+ls_ctrl_o-mestyp = iv_mestyp.
+ls_ctrl_o-idoctp = iv_idoctyp.
+ls_ctrl_o-direct = '1'.
+ls_ctrl_o-sndprt = COND #( WHEN iv_sndprt IS INITIAL THEN 'LS' ELSE iv_sndprt ).
+ls_ctrl_o-sndprn = COND #( WHEN iv_sndprn IS INITIAL THEN 'LOCAL' ELSE iv_sndprn ).
+ls_ctrl_o-rcvprt = COND #( WHEN iv_rcvprt IS INITIAL THEN 'LS' ELSE iv_rcvprt ).
+ls_ctrl_o-rcvprn = COND #( WHEN iv_rcvprn IS INITIAL THEN 'LOCAL' ELSE iv_rcvprn ).
+ls_ctrl_o-rcvpor = iv_rcvpor.
+
+" Append control to the comm table BEFORE calling the FM
+APPEND ls_ctrl_o TO t_ctrl_o.
+
+" Create IDoc(s) → status 30
+CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
+ EXPORTING
+ master_idoc_control = ls_ctrl_o
+ TABLES
+ communication_idoc_control = t_ctrl_o
+ master_idoc_data = t_data_o
+ EXCEPTIONS
+ error_in_idoc_control = 1
+ error_writing_idoc_status = 2
+ error_in_idoc_data = 3
+ sending_logical_system_unknown = 4
+ OTHERS = 5.
+
+IF sy-subrc = 0.
+
+ " Collect all DOCNUMs from t_ctrl_o
+ REFRESH et_docnums.
+ CLEAR ev_docnum.
+
+ LOOP AT t_ctrl_o INTO ls_ctrl_o WHERE docnum IS NOT INITIAL.
+ APPEND ls_ctrl_o-docnum TO et_docnums. " et_docnums is STANDARD TABLE OF EDI_DOCNUM
+ ev_docnum = ls_ctrl_o-docnum. " keep last for convenience
+ ENDLOOP.
+
+ " Optional: dispatch each IDoc immediately (avoid status 30)
+ "LOOP AT et_docnums ASSIGNING FIELD-SYMBOL().
+ "CALL FUNCTION 'IDOC_START_OUTBOUND'
+ " EXPORTING
+ " idoc_number =
+ " EXCEPTIONS
+ " OTHERS = 1.
+ "ENDLOOP.
+
+ CALL FUNCTION 'DB_COMMIT'.
+ CALL FUNCTION 'DEQUEUE_ALL'. " or EDI_DOCUMENT_DEQUEUE_LATER for individual IDocs
+ COMMIT WORK AND WAIT.
+
+ DATA(lv_cnt) = lines( et_docnums ).
+ DATA(lv_msg) = |Outbound IDoc(s) created and dispatched. Count={ lv_cnt }.|.
+ CLEAR ls_ret.
+ ls_ret-type = 'S'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '020'.
+ ls_ret-message = lv_msg.
+ APPEND ls_ret TO et_return.
+
+ELSE.
+ CLEAR ls_ret.
+ ls_ret-type = 'E'.
+ ls_ret-id = 'ZORD'.
+ ls_ret-number = '021'.
+ ls_ret-message = |MASTER_IDOC_DISTRIBUTE failed (SY-SUBRC={ sy-subrc }).|.
+ APPEND ls_ret TO et_return.
+ENDIF.
+
+
+ ENDIF.
+
+ ENDLOOP.
+
+ " Commit once at the end (batch-friendly)
+ COMMIT WORK AND WAIT.
+
+ENDFUNCTION.
diff --git a/agentic-sap-workflows/abapgitexported/src/z_get_orders_analysis.abap b/agentic-sap-workflows/abapgitexported/src/z_get_orders_analysis.abap
new file mode 100644
index 0000000..7eebee6
--- /dev/null
+++ b/agentic-sap-workflows/abapgitexported/src/z_get_orders_analysis.abap
@@ -0,0 +1,39 @@
+FUNCTION Z_GET_ORDERS_ANALYSIS.
+*"----------------------------------------------------------------------
+*"*"Local Interface:
+*" IMPORTING
+*" VALUE(DEST) TYPE CHAR20 DEFAULT 'YOURDESTINATION'
+*" EXPORTING
+*" VALUE(EXCEPTIONMSG) TYPE ZCHAR1000
+*" VALUE(ANALYSIS) TYPE STRING
+*" TABLES
+*" IT_CSV STRUCTURE ZTY_CSV_LINE
+*" CHANGING
+*" VALUE(RETURN) TYPE BAPIRET2 OPTIONAL
+*" EXCEPTIONS
+*" SENDEXCEPTIONTOSAPSERVER
+*"----------------------------------------------------------------------
+CALL FUNCTION 'Z_GET_ORDERS_ANALYSIS' DESTINATION DEST
+ IMPORTING
+ ANALYSIS = ANALYSIS
+ TABLES
+ IT_CSV = IT_CSV
+ CHANGING
+ RETURN = RETURN
+ EXCEPTIONS
+ SENDEXCEPTIONTOSAPSERVER = 1
+ system_failure = 2 MESSAGE EXCEPTIONMSG
+ communication_failure = 3 MESSAGE EXCEPTIONMSG
+ OTHERS = 4.
+
+CASE sy-subrc.
+ WHEN 0.
+ EXCEPTIONMSG = 'ok'.
+ WHEN 1.
+ EXCEPTIONMSG = |Exception from workflow: SENDEXCEPTIONTOSAPSERVER { sy-msgv1 }{ sy-msgv2 }{ sy-msgv3 }{ sy-msgv4 } |.
+ WHEN 2 or 3.
+ WHEN OTHERS.
+ EXCEPTIONMSG = |Error in workflow: { sy-msgv1 }{ sy-msgv2 }{ sy-msgv3 }{ sy-msgv4 } |.
+ENDCASE.
+
+ENDFUNCTION.
diff --git a/agentic-sap-workflows/abapgitexported/src/zabapgit_standalone.prog.abap b/agentic-sap-workflows/abapgitexported/src/zabapgit_standalone.prog.abap
new file mode 100644
index 0000000..bf4f9e0
--- /dev/null
+++ b/agentic-sap-workflows/abapgitexported/src/zabapgit_standalone.prog.abap
@@ -0,0 +1,147060 @@
+REPORT zabapgit_standalone LINE-SIZE 100.
+
+* See http://www.abapgit.org
+
+********************************************************************************
+* The MIT License (MIT)
+*
+* Copyright (c) 2014 abapGit Contributors
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the "Software"), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all
+* copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+* SOFTWARE.
+********************************************************************************
+
+INTERFACE zif_abapgit_version DEFERRED.
+INTERFACE zif_abapgit_definitions DEFERRED.
+INTERFACE zif_abapgit_xml_output DEFERRED.
+INTERFACE zif_abapgit_xml_input DEFERRED.
+INTERFACE zif_abapgit_log DEFERRED.
+INTERFACE zif_abapgit_popups DEFERRED.
+INTERFACE zif_abapgit_frontend_services DEFERRED.
+INTERFACE zif_abapgit_services_repo DEFERRED.
+INTERFACE zif_abapgit_services_git DEFERRED.
+INTERFACE zif_abapgit_progress DEFERRED.
+INTERFACE zif_abapgit_gui_diff_extra DEFERRED.
+INTERFACE zif_abapgit_gui_diff DEFERRED.
+INTERFACE zif_abapgit_html_table DEFERRED.
+INTERFACE zif_abapgit_html_popup DEFERRED.
+INTERFACE zif_abapgit_html_form DEFERRED.
+INTERFACE zif_abapgit_gui_render_item DEFERRED.
+INTERFACE zif_abapgit_gui_page_title DEFERRED.
+INTERFACE zif_abapgit_gui_menu_provider DEFERRED.
+INTERFACE zif_abapgit_flow_logic DEFERRED.
+INTERFACE zif_abapgit_flow_exit DEFERRED.
+INTERFACE zif_abapgit_html_viewer DEFERRED.
+INTERFACE zif_abapgit_html DEFERRED.
+INTERFACE zif_abapgit_gui_services DEFERRED.
+INTERFACE zif_abapgit_gui_renderable DEFERRED.
+INTERFACE zif_abapgit_gui_modal DEFERRED.
+INTERFACE zif_abapgit_gui_html_processor DEFERRED.
+INTERFACE zif_abapgit_gui_hotkeys DEFERRED.
+INTERFACE zif_abapgit_gui_hotkey_ctl DEFERRED.
+INTERFACE zif_abapgit_gui_event_handler DEFERRED.
+INTERFACE zif_abapgit_gui_event DEFERRED.
+INTERFACE zif_abapgit_gui_error_handler DEFERRED.
+INTERFACE zif_abapgit_gui_asset_manager DEFERRED.
+INTERFACE zif_abapgit_repo_srv DEFERRED.
+INTERFACE zif_abapgit_repo_online DEFERRED.
+INTERFACE zif_abapgit_repo_listener DEFERRED.
+INTERFACE zif_abapgit_repo_checksums DEFERRED.
+INTERFACE zif_abapgit_repo DEFERRED.
+INTERFACE zif_abapgit_dot_abapgit DEFERRED.
+INTERFACE zif_abapgit_status_calc DEFERRED.
+INTERFACE zif_abapgit_stage_logic DEFERRED.
+INTERFACE zif_abapgit_merge DEFERRED.
+INTERFACE zif_abapgit_object_filter DEFERRED.
+INTERFACE zif_abapgit_persistence DEFERRED.
+INTERFACE zif_abapgit_persist_user DEFERRED.
+INTERFACE zif_abapgit_persist_settings DEFERRED.
+INTERFACE zif_abapgit_persist_repo_cs DEFERRED.
+INTERFACE zif_abapgit_persist_repo DEFERRED.
+INTERFACE zif_abapgit_persist_packages DEFERRED.
+INTERFACE zif_abapgit_persist_background DEFERRED.
+INTERFACE zif_abapgit_objects DEFERRED.
+INTERFACE zif_abapgit_object DEFERRED.
+INTERFACE zif_abapgit_comparator DEFERRED.
+INTERFACE zif_abapgit_lxe_texts DEFERRED.
+INTERFACE zif_abapgit_longtexts DEFERRED.
+INTERFACE zif_abapgit_lang_definitions DEFERRED.
+INTERFACE zif_abapgit_i18n_file DEFERRED.
+INTERFACE zif_abapgit_object_tabl DEFERRED.
+INTERFACE zif_abapgit_sap_report DEFERRED.
+INTERFACE zif_abapgit_sap_package DEFERRED.
+INTERFACE zif_abapgit_sap_namespace DEFERRED.
+INTERFACE zif_abapgit_function_module DEFERRED.
+INTERFACE zif_abapgit_field_rules DEFERRED.
+INTERFACE zif_abapgit_oo_object_fnc DEFERRED.
+INTERFACE zif_abapgit_gui_jumper DEFERRED.
+INTERFACE zif_abapgit_object_enhs DEFERRED.
+INTERFACE zif_abapgit_object_enho DEFERRED.
+INTERFACE zif_abapgit_ecatt_upload DEFERRED.
+INTERFACE zif_abapgit_ecatt_download DEFERRED.
+INTERFACE zif_abapgit_ecatt DEFERRED.
+INTERFACE zif_abapgit_tadir DEFERRED.
+INTERFACE zif_abapgit_aff_types_v1 DEFERRED.
+INTERFACE zif_abapgit_aff_oo_types_v1 DEFERRED.
+INTERFACE zif_abapgit_aff_intf_v1 DEFERRED.
+INTERFACE zif_abapgit_aff_type_mapping DEFERRED.
+INTERFACE zif_abapgit_aff_registry DEFERRED.
+INTERFACE zif_abapgit_ajson_types DEFERRED.
+INTERFACE zif_abapgit_ajson_ref_init DEFERRED.
+INTERFACE zif_abapgit_ajson_mapping DEFERRED.
+INTERFACE zif_abapgit_ajson_iterator DEFERRED.
+INTERFACE zif_abapgit_ajson_filter DEFERRED.
+INTERFACE zif_abapgit_ajson DEFERRED.
+INTERFACE zif_abapgit_code_inspector DEFERRED.
+INTERFACE zif_abapgit_http_response DEFERRED.
+INTERFACE zif_abapgit_http_agent DEFERRED.
+INTERFACE zif_abapgit_pr_enum_provider DEFERRED.
+INTERFACE zif_abapgit_git_transport DEFERRED.
+INTERFACE zif_abapgit_git_definitions DEFERRED.
+INTERFACE zif_abapgit_git_branch_list DEFERRED.
+INTERFACE zif_abapgit_gitv2_porcelain DEFERRED.
+INTERFACE zif_abapgit_exit DEFERRED.
+INTERFACE zif_abapgit_auth DEFERRED.
+INTERFACE zif_abapgit_user_record DEFERRED.
+INTERFACE zif_abapgit_environment DEFERRED.
+INTERFACE zif_abapgit_diff DEFERRED.
+INTERFACE zif_abapgit_diff3 DEFERRED.
+INTERFACE zif_abapgit_data_supporter DEFERRED.
+INTERFACE zif_abapgit_data_serializer DEFERRED.
+INTERFACE zif_abapgit_data_deserializer DEFERRED.
+INTERFACE zif_abapgit_data_config DEFERRED.
+INTERFACE zif_abapgit_default_transport DEFERRED.
+INTERFACE zif_abapgit_cts_api DEFERRED.
+INTERFACE zif_abapgit_background DEFERRED.
+INTERFACE zif_abapgit_apack_definitions DEFERRED.
+CLASS zcl_abapgit_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_xml_pretty DEFINITION DEFERRED.
+CLASS zcl_abapgit_xml_output DEFINITION DEFERRED.
+CLASS zcl_abapgit_xml_input DEFINITION DEFERRED.
+CLASS zcl_abapgit_xml DEFINITION DEFERRED.
+CLASS zcl_abapgit_utils DEFINITION DEFERRED.
+CLASS zcl_abapgit_timer DEFINITION DEFERRED.
+CLASS zcl_abapgit_string_map DEFINITION DEFERRED.
+CLASS zcl_abapgit_string_buffer DEFINITION DEFERRED.
+CLASS zcl_abapgit_path DEFINITION DEFERRED.
+CLASS zcl_abapgit_log DEFINITION DEFERRED.
+CLASS zcl_abapgit_convert DEFINITION DEFERRED.
+CLASS zcl_abapgit_ui_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_popups DEFINITION DEFERRED.
+CLASS zcl_abapgit_password_dialog DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_hotkey_ctl DEFINITION DEFERRED.
+CLASS zcl_abapgit_frontend_services DEFINITION DEFERRED.
+CLASS zcl_abapgit_frontend_no_gui DEFINITION DEFERRED.
+CLASS zcl_abapgit_services_repo DEFINITION DEFERRED.
+CLASS zcl_abapgit_services_git DEFINITION DEFERRED.
+CLASS zcl_abapgit_services_abapgit DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_router DEFINITION DEFERRED.
+CLASS zcl_abapgit_progress DEFINITION DEFERRED.
+CLASS zcl_abapgit_popup_tag_list DEFINITION DEFERRED.
+CLASS zcl_abapgit_popup_pull_request DEFINITION DEFERRED.
+CLASS zcl_abapgit_popup_code_insp DEFINITION DEFERRED.
+CLASS zcl_abapgit_popup_branch_list DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_tutorial DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_tags DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_stage DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_run_bckg DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_repo_view DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_repo_over DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_pull DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_merge_sel DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_merge_res DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_merge DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_ex_pckage DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_ex_object DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_debuginfo DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_data DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_cpackage DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_commit DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_chg_pckg DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_sett_repo DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_sett_remo DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_sett_pers DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_sett_locl DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_sett_info DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_sett_glob DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_sett_bckg DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_cr_repo DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_addonline DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_addofflin DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_patch DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_diff_file DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_diff_base DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_diff DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_db_entry DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_db DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_whereused DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_syntax DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_runit DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_codi_base DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_code_insp DEFINITION DEFERRED.
+CLASS zcl_abapgit_log_viewer DEFINITION DEFERRED.
+CLASS zcl_abapgit_html_toolbar DEFINITION DEFERRED.
+CLASS zcl_abapgit_html_table DEFINITION DEFERRED.
+CLASS zcl_abapgit_html_form_utils DEFINITION DEFERRED.
+CLASS zcl_abapgit_html_form DEFINITION DEFERRED.
+CLASS zcl_abapgit_html_action_utils DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_picklist DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_hoc DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_menus DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_in_page_modal DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_component DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_chunk_lib DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_buttons DEFINITION DEFERRED.
+CLASS zcl_abapgit_exception_viewer DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_flowcons DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_flow DEFINITION DEFERRED.
+CLASS zcl_abapgit_flow_page_utils DEFINITION DEFERRED.
+CLASS zcl_abapgit_flow_logic DEFINITION DEFERRED.
+CLASS zcl_abapgit_flow_git DEFINITION DEFERRED.
+CLASS zcl_abapgit_flow_exit DEFINITION DEFERRED.
+CLASS zcl_abapgit_ui_core_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_html_viewer_gui DEFINITION DEFERRED.
+CLASS zcl_abapgit_html_parts DEFINITION DEFERRED.
+CLASS zcl_abapgit_html DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_utils DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_html_processor DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_event DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_css_processor DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_asset_manager DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_page_template DEFINITION DEFERRED.
+CLASS zcl_abapgit_syntax_xml DEFINITION DEFERRED.
+CLASS zcl_abapgit_syntax_txt DEFINITION DEFERRED.
+CLASS zcl_abapgit_syntax_po DEFINITION DEFERRED.
+CLASS zcl_abapgit_syntax_json DEFINITION DEFERRED.
+CLASS zcl_abapgit_syntax_js DEFINITION DEFERRED.
+CLASS zcl_abapgit_syntax_highlighter DEFINITION DEFERRED.
+CLASS zcl_abapgit_syntax_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_syntax_css DEFINITION DEFERRED.
+CLASS zcl_abapgit_syntax_abap DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_status DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_srv DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_online DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_offline DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_cs_migration DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_content_list DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_checksums DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo DEFINITION DEFERRED.
+CLASS zcl_abapgit_dot_abapgit DEFINITION DEFERRED.
+CLASS zcl_abapgit_zip DEFINITION DEFERRED.
+CLASS zcl_abapgit_version DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_requirements DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_news DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_labels DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_item_state DEFINITION DEFERRED.
+CLASS zcl_abapgit_status_calc DEFINITION DEFERRED.
+CLASS zcl_abapgit_stage_logic DEFINITION DEFERRED.
+CLASS zcl_abapgit_stage DEFINITION DEFERRED.
+CLASS zcl_abapgit_merge DEFINITION DEFERRED.
+CLASS zcl_abapgit_repo_filter DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_filter_tran DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_filter_obj DEFINITION DEFERRED.
+CLASS zcl_abapgit_persistence_user DEFINITION DEFERRED.
+CLASS zcl_abapgit_persistence_repo DEFINITION DEFERRED.
+CLASS zcl_abapgit_persistence_db DEFINITION DEFERRED.
+CLASS zcl_abapgit_persist_settings DEFINITION DEFERRED.
+CLASS zcl_abapgit_persist_packages DEFINITION DEFERRED.
+CLASS zcl_abapgit_persist_migrate DEFINITION DEFERRED.
+CLASS zcl_abapgit_persist_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_persist_background DEFINITION DEFERRED.
+CLASS zcl_abapgit_migrations DEFINITION DEFERRED.
+CLASS zcl_abapgit_objects_super DEFINITION DEFERRED.
+CLASS zcl_abapgit_objects_program DEFINITION DEFERRED.
+CLASS zcl_abapgit_objects_generic DEFINITION DEFERRED.
+CLASS zcl_abapgit_objects_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_objects_bridge DEFINITION DEFERRED.
+CLASS zcl_abapgit_objects DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_xslt DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_xinx DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_webi DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_wdyn DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_wdya DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_wdcc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_wdca DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_wapa DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_w3xx_super DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_w3mi DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_w3ht DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_view DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_vcls DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ueno DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_udmo DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ucsa DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_type DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ttyp DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_tran DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_tobj DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sxsd DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sxci DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_suso DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sush DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_susc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sucu DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_styl DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_stvi DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ssst DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ssfo DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_srvd DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_srvb DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_srfc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sqsc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sprx DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sppf DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_splo DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sots DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sod2 DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sod1 DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sobj DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_smtg DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_smim DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sktd DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sicf DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_shma DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_shlp DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_shi8 DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_shi5 DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_shi3 DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sfsw DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sfpi DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sfpf DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sfbs DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sfbf DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_scvi DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_scp1 DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_saxx_super DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sapc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_samc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_prog DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_prag DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_pinf DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_pers DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_pdxx_super DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_pdts DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_para DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_otgr DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_odso DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_oa2p DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_nspc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_nrob DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_msag DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_jobd DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iwvb DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iwsv DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iwsg DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iwpr DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iwom DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iwmo DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iobj DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_intf DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iext DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_idoc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iaxu DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iatu DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iasp DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iarp DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_iamu DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_http DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_g4bs DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_g4ba DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_fugs DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_fugr DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ftgl DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_form DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_fdt0 DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ensc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enqu DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enhs DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enho DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enhc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ecvo DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ectd DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ectc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ecsp DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ecsd DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ecatt_super DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ecat DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_dtel DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_dtdc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_dsys DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_drul DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_doma DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_docv DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_doct DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_dial DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_devc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ddlx DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ddls DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_dcls DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_cus2 DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_cus1 DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_cus0 DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_cmpt DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_cmod DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_clas DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_chdo DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_char DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_bdef DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_avas DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_avar DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_auth DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_asfc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_area DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_aqsg DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_aqqu DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_aqbg DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_apis DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_amsd DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_aifc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_acid DEFINITION DEFERRED.
+CLASS zcl_abapgit_sots_handler DEFINITION DEFERRED.
+CLASS zcl_abapgit_sotr_handler DEFINITION DEFERRED.
+CLASS zcl_abapgit_properties_file DEFINITION DEFERRED.
+CLASS zcl_abapgit_po_file DEFINITION DEFERRED.
+CLASS zcl_abapgit_lxe_texts DEFINITION DEFERRED.
+CLASS zcl_abapgit_longtexts DEFINITION DEFERRED.
+CLASS zcl_abapgit_i18n_params DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_tabl_ddl DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_tabl_compar DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_tabl DEFINITION DEFERRED.
+CLASS zcl_abapgit_sap_report DEFINITION DEFERRED.
+CLASS zcl_abapgit_sap_package DEFINITION DEFERRED.
+CLASS zcl_abapgit_sap_namespace DEFINITION DEFERRED.
+CLASS zcl_abapgit_function_module DEFINITION DEFERRED.
+CLASS zcl_abapgit_field_rules DEFINITION DEFERRED.
+CLASS zcl_abapgit_oo_serializer DEFINITION DEFERRED.
+CLASS zcl_abapgit_oo_interface DEFINITION DEFERRED.
+CLASS zcl_abapgit_oo_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_oo_class DEFINITION DEFERRED.
+CLASS zcl_abapgit_oo_base DEFINITION DEFERRED.
+CLASS zcl_abapgit_gui_jumper DEFINITION DEFERRED.
+CLASS zcl_abapgit_adt_link DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enhs_hook_d DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enhs_badi_d DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enho_wdyn DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enho_wdyc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enho_intf DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enho_hook DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enho_fugr DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enho_clif DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enho_class DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_enho_badi DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_val_obj_upl DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_val_obj_down DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_system_upl DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_system_downl DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_sp_upload DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_sp_download DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_script_upl DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_script_downl DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_helper DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_data_upload DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_data_downl DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_config_upl DEFINITION DEFERRED.
+CLASS zcl_abapgit_ecatt_config_downl DEFINITION DEFERRED.
+CLASS zcl_abapgit_tadir DEFINITION DEFERRED.
+CLASS zcl_abapgit_serialize DEFINITION DEFERRED.
+CLASS zcl_abapgit_objects_files DEFINITION DEFERRED.
+CLASS zcl_abapgit_objects_compare DEFINITION DEFERRED.
+CLASS zcl_abapgit_objects_check DEFINITION DEFERRED.
+CLASS zcl_abapgit_objects_activation DEFINITION DEFERRED.
+CLASS zcl_abapgit_item_graph DEFINITION DEFERRED.
+CLASS zcl_abapgit_folder_logic DEFINITION DEFERRED.
+CLASS zcl_abapgit_filename_logic DEFINITION DEFERRED.
+CLASS zcl_abapgit_file_deserialize DEFINITION DEFERRED.
+CLASS zcl_abapgit_dependencies DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_uist DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_uipg DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_uiad DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_swcr DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_smbc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sajt DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_sajc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_ront DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_nont DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_gsmp DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_evtb DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_eeec DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_dteb DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_dsfi DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_dsfd DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_drty DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_dras DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_cota DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_common_aff DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_chkv DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_chko DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_chkc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_cdbo DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_bgqc DEFINITION DEFERRED.
+CLASS zcl_abapgit_object_aplo DEFINITION DEFERRED.
+CLASS zcl_abapgit_json_path DEFINITION DEFERRED.
+CLASS zcl_abapgit_json_handler DEFINITION DEFERRED.
+CLASS zcl_abapgit_aff_registry DEFINITION DEFERRED.
+CLASS zcl_abapgit_aff_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_ajson_utilities DEFINITION DEFERRED.
+CLASS zcl_abapgit_ajson_ref_init_lib DEFINITION DEFERRED.
+CLASS zcl_abapgit_ajson_mapping DEFINITION DEFERRED.
+CLASS zcl_abapgit_ajson_filter_lib DEFINITION DEFERRED.
+CLASS zcl_abapgit_ajson DEFINITION DEFERRED.
+CLASS zcl_abapgit_where_used_tools DEFINITION DEFERRED.
+CLASS zcl_abapgit_code_inspector DEFINITION DEFERRED.
+CLASS zcl_abapgit_url DEFINITION DEFERRED.
+CLASS zcl_abapgit_proxy_config DEFINITION DEFERRED.
+CLASS zcl_abapgit_proxy_auth DEFINITION DEFERRED.
+CLASS zcl_abapgit_login_manager DEFINITION DEFERRED.
+CLASS zcl_abapgit_http_digest DEFINITION DEFERRED.
+CLASS zcl_abapgit_http_client DEFINITION DEFERRED.
+CLASS zcl_abapgit_http_agent DEFINITION DEFERRED.
+CLASS zcl_abapgit_http DEFINITION DEFERRED.
+CLASS zcl_abapgit_pr_enumerator DEFINITION DEFERRED.
+CLASS zcl_abapgit_pr_enum_github DEFINITION DEFERRED.
+CLASS zcl_abapgit_pr_enum_gitea DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_url DEFINITION DEFERRED.
+CLASS zcl_abapgit_zlib_stream DEFINITION DEFERRED.
+CLASS zcl_abapgit_zlib_huffman DEFINITION DEFERRED.
+CLASS zcl_abapgit_zlib_convert DEFINITION DEFERRED.
+CLASS zcl_abapgit_zlib DEFINITION DEFERRED.
+CLASS zcl_abapgit_hash DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_utils DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_transport DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_time DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_tag DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_porcelain DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_pack DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_delta DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_commit DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_branch_utils DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_branch_list DEFINITION DEFERRED.
+CLASS zcl_abapgit_git_add_patch DEFINITION DEFERRED.
+CLASS zcl_abapgit_gitv2_porcelain DEFINITION DEFERRED.
+CLASS zcl_abapgit_exit DEFINITION DEFERRED.
+CLASS zcl_abapgit_auth DEFINITION DEFERRED.
+CLASS zcl_abapgit_user_record DEFINITION DEFERRED.
+CLASS zcl_abapgit_settings DEFINITION DEFERRED.
+CLASS zcl_abapgit_language DEFINITION DEFERRED.
+CLASS zcl_abapgit_feature DEFINITION DEFERRED.
+CLASS zcl_abapgit_environment DEFINITION DEFERRED.
+CLASS zcl_abapgit_env_injector DEFINITION DEFERRED.
+CLASS zcl_abapgit_env_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_abap_language_vers DEFINITION DEFERRED.
+CLASS zcl_abapgit_diff_std DEFINITION DEFERRED.
+CLASS zcl_abapgit_diff_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_diff_diff3 DEFINITION DEFERRED.
+CLASS zcl_abapgit_diff DEFINITION DEFERRED.
+CLASS zcl_abapgit_diff3 DEFINITION DEFERRED.
+CLASS zcl_abapgit_data_utils DEFINITION DEFERRED.
+CLASS zcl_abapgit_data_supporter DEFINITION DEFERRED.
+CLASS zcl_abapgit_data_serializer DEFINITION DEFERRED.
+CLASS zcl_abapgit_data_injector DEFINITION DEFERRED.
+CLASS zcl_abapgit_data_factory DEFINITION DEFERRED.
+CLASS zcl_abapgit_data_deserializer DEFINITION DEFERRED.
+CLASS zcl_abapgit_data_config DEFINITION DEFERRED.
+CLASS zcl_abapgit_transport_objects DEFINITION DEFERRED.
+CLASS zcl_abapgit_transport_mass DEFINITION DEFERRED.
+CLASS zcl_abapgit_transport_2_branch DEFINITION DEFERRED.
+CLASS zcl_abapgit_transport DEFINITION DEFERRED.
+CLASS zcl_abapgit_default_transport DEFINITION DEFERRED.
+CLASS zcl_abapgit_cts_api DEFINITION DEFERRED.
+CLASS zcl_abapgit_background_push_fi DEFINITION DEFERRED.
+CLASS zcl_abapgit_background_push_au DEFINITION DEFERRED.
+CLASS zcl_abapgit_background_pull DEFINITION DEFERRED.
+CLASS zcl_abapgit_background DEFINITION DEFERRED.
+CLASS zcl_abapgit_apack_writer DEFINITION DEFERRED.
+CLASS zcl_abapgit_apack_reader DEFINITION DEFERRED.
+CLASS zcl_abapgit_apack_migration DEFINITION DEFERRED.
+CLASS zcl_abapgit_apack_helper DEFINITION DEFERRED.
+CLASS zcx_abapgit_ajson_error DEFINITION
+ inheriting from CX_STATIC_CHECK
+ final
+ create public .
+
+public section.
+
+ interfaces IF_T100_MESSAGE .
+
+ types:
+ ty_rc type c length 4 .
+
+ constants:
+ begin of ZCX_AJSON_ERROR,
+ msgid type symsgid value '00',
+ msgno type symsgno value '001',
+ attr1 type scx_attrname value 'A1',
+ attr2 type scx_attrname value 'A2',
+ attr3 type scx_attrname value 'A3',
+ attr4 type scx_attrname value 'A4',
+ end of ZCX_AJSON_ERROR .
+ data RC type TY_RC read-only .
+ data MESSAGE type STRING read-only .
+ data LOCATION type STRING read-only .
+ data A1 type SYMSGV read-only .
+ data A2 type SYMSGV read-only .
+ data A3 type SYMSGV read-only .
+ data A4 type SYMSGV read-only .
+
+ methods CONSTRUCTOR
+ importing
+ !TEXTID like IF_T100_MESSAGE=>T100KEY optional
+ !PREVIOUS like PREVIOUS optional
+ !RC type TY_RC optional
+ !MESSAGE type STRING optional
+ !LOCATION type STRING optional
+ !A1 type SYMSGV optional
+ !A2 type SYMSGV optional
+ !A3 type SYMSGV optional
+ !A4 type SYMSGV optional .
+ class-methods RAISE
+ importing
+ !IV_MSG type STRING
+ !IV_LOCATION type STRING optional
+ !IS_NODE type ANY optional
+ raising
+ zcx_abapgit_ajson_error .
+ methods SET_LOCATION
+ importing
+ !IV_LOCATION type STRING optional
+ !IS_NODE type ANY optional
+ preferred parameter IV_LOCATION .
+protected section.
+private section.
+ types:
+ begin of ty_message_parts,
+ a1 like a1,
+ a2 like a1,
+ a3 like a1,
+ a4 like a1,
+ end of ty_message_parts.
+ENDCLASS.
+CLASS zcx_abapgit_ajson_error IMPLEMENTATION.
+method CONSTRUCTOR.
+CALL METHOD SUPER->CONSTRUCTOR
+EXPORTING
+PREVIOUS = PREVIOUS
+.
+me->RC = RC .
+me->MESSAGE = MESSAGE .
+me->LOCATION = LOCATION .
+me->A1 = A1 .
+me->A2 = A2 .
+me->A3 = A3 .
+me->A4 = A4 .
+clear me->textid.
+if textid is initial.
+ IF_T100_MESSAGE~T100KEY = ZCX_AJSON_ERROR .
+else.
+ IF_T100_MESSAGE~T100KEY = TEXTID.
+endif.
+endmethod.
+method raise.
+
+ data lx type ref to zcx_abapgit_ajson_error.
+
+ create object lx exporting message = iv_msg.
+ lx->set_location(
+ iv_location = iv_location
+ is_node = is_node ).
+ raise exception lx.
+
+endmethod.
+method set_location.
+
+ data ls_msg type ty_message_parts.
+ data lv_location type string.
+ data lv_tmp type string.
+ field-symbols type string.
+ field-symbols type string.
+
+ if iv_location is not initial.
+ lv_location = iv_location.
+ elseif is_node is not initial.
+ assign component 'PATH' of structure is_node to .
+ assign component 'NAME' of structure is_node to .
+ if is assigned and is assigned.
+ lv_location = && .
+ endif.
+ endif.
+
+ if lv_location is not initial.
+ lv_tmp = message && | @{ lv_location }|.
+ else.
+ lv_tmp = message.
+ endif.
+
+ ls_msg = lv_tmp.
+
+ location = lv_location.
+ a1 = ls_msg-a1.
+ a2 = ls_msg-a2.
+ a3 = ls_msg-a3.
+ a4 = ls_msg-a4.
+
+endmethod.
+ENDCLASS.
+
+"! abapGit general error
+CLASS zcx_abapgit_exception DEFINITION
+ INHERITING FROM cx_static_check
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES if_t100_message .
+
+ TYPES:
+ BEGIN OF ty_scr_info,
+ program TYPE progname,
+ include TYPE progname,
+ line TYPE i,
+ END OF ty_scr_info.
+
+ CONSTANTS:
+ BEGIN OF c_section_text,
+ cause TYPE string VALUE `Cause`,
+ system_response TYPE string VALUE `System response`,
+ what_to_do TYPE string VALUE `Procedure`,
+ sys_admin TYPE string VALUE `System administration`,
+ END OF c_section_text .
+ CONSTANTS:
+ BEGIN OF c_section_token,
+ cause TYPE string VALUE `&CAUSE&`,
+ system_response TYPE string VALUE `&SYSTEM_RESPONSE&`,
+ what_to_do TYPE string VALUE `&WHAT_TO_DO&`,
+ sys_admin TYPE string VALUE `&SYS_ADMIN&`,
+ END OF c_section_token .
+
+ CLASS-DATA null TYPE string.
+
+ DATA msgv1 TYPE symsgv READ-ONLY .
+ DATA msgv2 TYPE symsgv READ-ONLY .
+ DATA msgv3 TYPE symsgv READ-ONLY .
+ DATA msgv4 TYPE symsgv READ-ONLY .
+ DATA mv_longtext TYPE string READ-ONLY.
+ DATA mt_callstack TYPE abap_callstack READ-ONLY.
+ DATA mi_log TYPE REF TO zif_abapgit_log READ-ONLY.
+ DATA ms_src_info TYPE ty_scr_info READ-ONLY.
+
+ "! Raise exception with text
+ "! @parameter iv_text | Text
+ "! @parameter ix_previous | Previous exception
+ "! @parameter ii_log | Log
+ "! @parameter iv_longtext | Longtext
+ "! @raising zcx_abapgit_exception | Exception
+ CLASS-METHODS raise
+ IMPORTING
+ !iv_text TYPE clike
+ !ix_previous TYPE REF TO cx_root OPTIONAL
+ !ii_log TYPE REF TO zif_abapgit_log OPTIONAL
+ !iv_longtext TYPE csequence OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ "! Raise exception with T100 message
+ "!
+ "! Will default to sy-msg* variables. These need to be set right before calling this method.
+ "!
+ "! @parameter iv_msgid | Message ID
+ "! @parameter iv_msgno | Message number
+ "! @parameter iv_msgv1 | Message variable 1
+ "! @parameter iv_msgv2 | Message variable 2
+ "! @parameter iv_msgv3 | Message variable 3
+ "! @parameter iv_msgv4 | Message variable 4
+ "! @parameter ii_log | Log
+ "! @parameter ix_previous | Previous exception
+ "! @parameter iv_longtext | Longtext
+ "! @raising zcx_abapgit_exception | Exception
+ CLASS-METHODS raise_t100
+ IMPORTING
+ !iv_msgid TYPE symsgid DEFAULT sy-msgid
+ !iv_msgno TYPE symsgno DEFAULT sy-msgno
+ !iv_msgv1 TYPE symsgv DEFAULT sy-msgv1
+ !iv_msgv2 TYPE symsgv DEFAULT sy-msgv2
+ !iv_msgv3 TYPE symsgv DEFAULT sy-msgv3
+ !iv_msgv4 TYPE symsgv DEFAULT sy-msgv4
+ !ii_log TYPE REF TO zif_abapgit_log OPTIONAL
+ !ix_previous TYPE REF TO cx_root OPTIONAL
+ !iv_longtext TYPE csequence OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ "! Raise with text from previous exception
+ "! @parameter ix_previous | Previous exception
+ "! @parameter iv_longtext | Longtext
+ "! @raising zcx_abapgit_exception | Exception
+ CLASS-METHODS raise_with_text
+ IMPORTING
+ !ix_previous TYPE REF TO cx_root
+ !iv_longtext TYPE csequence OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ IMPORTING
+ !textid LIKE if_t100_message=>t100key OPTIONAL
+ !previous LIKE previous OPTIONAL
+ !log TYPE REF TO zif_abapgit_log OPTIONAL
+ !msgv1 TYPE symsgv OPTIONAL
+ !msgv2 TYPE symsgv OPTIONAL
+ !msgv3 TYPE symsgv OPTIONAL
+ !msgv4 TYPE symsgv OPTIONAL
+ !longtext TYPE csequence OPTIONAL .
+
+ METHODS get_source_position
+ REDEFINITION .
+ METHODS if_message~get_longtext
+ REDEFINITION .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_generic_error_msg TYPE string VALUE `An error occurred (ZCX_ABAPGIT_EXCEPTION)`.
+
+ METHODS save_callstack .
+ METHODS itf_to_string
+ IMPORTING
+ !it_itf TYPE tline_tab
+ RETURNING
+ VALUE(rv_result) TYPE string .
+ METHODS get_t100_longtext_itf
+ RETURNING
+ VALUE(rt_itf) TYPE tline_tab .
+ METHODS remove_empty_section
+ IMPORTING
+ !iv_tabix_from TYPE i
+ !iv_tabix_to TYPE i
+ CHANGING
+ !ct_itf TYPE tline_tab .
+ METHODS replace_section_head_with_text
+ CHANGING
+ !cs_itf TYPE tline .
+ CLASS-METHODS remove_newlines_from_string
+ IMPORTING
+ iv_string TYPE string
+ RETURNING
+ VALUE(rv_result) TYPE string.
+ENDCLASS.
+CLASS zcx_abapgit_exception IMPLEMENTATION.
+ METHOD constructor ##ADT_SUPPRESS_GENERATION.
+
+ super->constructor( previous = previous ).
+
+ me->msgv1 = msgv1.
+ me->msgv2 = msgv2.
+ me->msgv3 = msgv3.
+ me->msgv4 = msgv4.
+ mi_log = log.
+ mv_longtext = longtext.
+
+ CLEAR me->textid.
+
+ IF textid IS INITIAL.
+ if_t100_message~t100key = if_t100_message=>default_textid.
+ ELSE.
+ if_t100_message~t100key = textid.
+ ENDIF.
+
+ save_callstack( ).
+
+ " Save for debugger
+ get_source_position(
+ IMPORTING
+ program_name = ms_src_info-program
+ include_name = ms_src_info-include
+ source_line = ms_src_info-line ).
+
+ ENDMETHOD.
+ METHOD get_source_position.
+
+ FIELD-SYMBOLS: LIKE LINE OF mt_callstack.
+
+ READ TABLE mt_callstack ASSIGNING
+ INDEX 1.
+ IF sy-subrc = 0.
+ program_name = -mainprogram.
+ include_name = -include.
+ source_line = -line.
+ ELSE.
+ super->get_source_position(
+ IMPORTING
+ program_name = program_name
+ include_name = include_name
+ source_line = source_line ).
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD get_t100_longtext_itf.
+
+ DATA: lv_docu_key TYPE doku_obj.
+
+ FIELD-SYMBOLS TYPE any.
+
+ lv_docu_key = if_t100_message~t100key-msgid && if_t100_message~t100key-msgno.
+
+ CALL FUNCTION 'DOCU_GET'
+ EXPORTING
+ id = 'NA'
+ langu = sy-langu
+ object = lv_docu_key
+ typ = 'E'
+ TABLES
+ line = rt_itf
+ EXCEPTIONS
+ OTHERS = 1.
+
+ IF sy-subrc = 0.
+ ASSIGN me->(if_t100_message~t100key-attr1) TO .
+ IF sy-subrc = 0.
+ REPLACE ALL OCCURRENCES OF '&V1&' IN TABLE rt_itf WITH .
+ ENDIF.
+ ASSIGN me->(if_t100_message~t100key-attr2) TO .
+ IF sy-subrc = 0.
+ REPLACE ALL OCCURRENCES OF '&V2&' IN TABLE rt_itf WITH .
+ ENDIF.
+ ASSIGN me->(if_t100_message~t100key-attr3) TO .
+ IF sy-subrc = 0.
+ REPLACE ALL OCCURRENCES OF '&V3&' IN TABLE rt_itf WITH .
+ ENDIF.
+ ASSIGN me->(if_t100_message~t100key-attr4) TO .
+ IF sy-subrc = 0.
+ REPLACE ALL OCCURRENCES OF '&V4&' IN TABLE rt_itf WITH .
+ ENDIF.
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD if_message~get_longtext.
+ DATA: lv_preserve_newlines_handled TYPE abap_bool VALUE abap_false.
+
+ IF mv_longtext IS NOT INITIAL.
+ result = mv_longtext.
+ ELSEIF if_t100_message~t100key IS NOT INITIAL.
+ result = itf_to_string( get_t100_longtext_itf( ) ).
+ ELSE.
+ result = super->get_longtext( preserve_newlines ).
+ lv_preserve_newlines_handled = abap_true.
+ ENDIF.
+
+ IF lv_preserve_newlines_handled = abap_false AND preserve_newlines = abap_false.
+ result = remove_newlines_from_string( result ).
+ ENDIF.
+ ENDMETHOD.
+ METHOD itf_to_string.
+
+ CONSTANTS: lc_format_section TYPE string VALUE 'U1'.
+
+ DATA:
+ lt_stream TYPE TABLE OF tdline,
+ lt_string TYPE TABLE OF string,
+ lt_itf TYPE tline_tab,
+ lv_has_content TYPE abap_bool,
+ lv_tabix_from TYPE syst-tabix,
+ lv_tabix_to TYPE syst-tabix.
+
+ FIELD-SYMBOLS: TYPE tline,
+ TYPE tline.
+
+ lt_itf = it_itf.
+
+ " You should remember that we replace the U1 format because
+ " that preserves the section header of longtexts.
+ LOOP AT lt_itf ASSIGNING
+ WHERE tdformat = lc_format_section.
+
+ CLEAR:
+ lv_has_content,
+ lv_tabix_to.
+
+ lv_tabix_from = sy-tabix.
+
+ LOOP AT lt_itf ASSIGNING
+ FROM sy-tabix + 1.
+
+ IF -tdformat = lc_format_section.
+ lv_tabix_to = sy-tabix.
+ EXIT.
+ ELSEIF -tdline IS NOT INITIAL.
+ lv_has_content = abap_true.
+ ENDIF.
+
+ ENDLOOP.
+
+ IF lv_has_content = abap_false.
+ remove_empty_section(
+ EXPORTING
+ iv_tabix_from = lv_tabix_from
+ iv_tabix_to = lv_tabix_to
+ CHANGING
+ ct_itf = lt_itf ).
+ CONTINUE.
+ ENDIF.
+
+ replace_section_head_with_text( CHANGING cs_itf = ).
+
+ ENDLOOP.
+
+ CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
+ EXPORTING
+ lf = 'X'
+ IMPORTING
+ stream_lines = lt_string
+ TABLES
+ itf_text = lt_itf
+ text_stream = lt_stream.
+
+ rv_result = concat_lines_of(
+ table = lt_string
+ sep = cl_abap_char_utilities=>newline ).
+
+ ENDMETHOD.
+ METHOD raise.
+
+ IF iv_text IS INITIAL.
+ cl_message_helper=>set_msg_vars_for_clike( c_generic_error_msg ).
+ ELSE.
+ cl_message_helper=>set_msg_vars_for_clike( iv_text ).
+ ENDIF.
+
+ raise_t100(
+ ii_log = ii_log
+ ix_previous = ix_previous
+ iv_longtext = iv_longtext ).
+
+ ENDMETHOD.
+ METHOD raise_t100.
+ DATA: ls_t100_key TYPE scx_t100key.
+
+ ls_t100_key-msgid = iv_msgid.
+ ls_t100_key-msgno = iv_msgno.
+ ls_t100_key-attr1 = 'MSGV1'.
+ ls_t100_key-attr2 = 'MSGV2'.
+ ls_t100_key-attr3 = 'MSGV3'.
+ ls_t100_key-attr4 = 'MSGV4'.
+
+ IF iv_msgid IS INITIAL.
+ CLEAR ls_t100_key.
+ ENDIF.
+
+ RAISE EXCEPTION TYPE zcx_abapgit_exception
+ EXPORTING
+ textid = ls_t100_key
+ log = ii_log
+ msgv1 = iv_msgv1
+ msgv2 = iv_msgv2
+ msgv3 = iv_msgv3
+ msgv4 = iv_msgv4
+ previous = ix_previous
+ longtext = iv_longtext.
+ ENDMETHOD.
+ METHOD raise_with_text.
+ raise(
+ iv_text = ix_previous->get_text( )
+ ix_previous = ix_previous
+ iv_longtext = iv_longtext ).
+ ENDMETHOD.
+ METHOD remove_empty_section.
+ IF iv_tabix_to BETWEEN iv_tabix_from AND lines( ct_itf ).
+ DELETE ct_itf FROM iv_tabix_from TO iv_tabix_to.
+ ELSE.
+ DELETE ct_itf FROM iv_tabix_from.
+ ENDIF.
+ ENDMETHOD.
+ METHOD remove_newlines_from_string.
+ rv_result = iv_string.
+
+ REPLACE ALL OCCURRENCES OF ` ` && cl_abap_char_utilities=>cr_lf IN rv_result WITH ` `.
+ REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN rv_result WITH ` `.
+ REPLACE ALL OCCURRENCES OF ` ` && cl_abap_char_utilities=>newline IN rv_result WITH ` `.
+ REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN rv_result WITH ` `.
+ ENDMETHOD.
+ METHOD replace_section_head_with_text.
+
+ CASE cs_itf-tdline.
+ WHEN c_section_token-cause.
+ cs_itf-tdline = c_section_text-cause.
+ WHEN c_section_token-system_response.
+ cs_itf-tdline = c_section_text-system_response.
+ WHEN c_section_token-what_to_do.
+ cs_itf-tdline = c_section_text-what_to_do.
+ WHEN c_section_token-sys_admin.
+ cs_itf-tdline = c_section_text-sys_admin.
+ ENDCASE.
+
+ ENDMETHOD.
+ METHOD save_callstack.
+
+ FIELD-SYMBOLS: LIKE LINE OF mt_callstack.
+
+ CALL FUNCTION 'SYSTEM_CALLSTACK'
+ IMPORTING
+ callstack = mt_callstack.
+
+ " You should remember that the first lines are from zcx_abapgit_exception
+ " and are removed so that highest level in the callstack is the position where
+ " the exception is raised.
+ "
+ " For the merged report it's hard to do that, because zcx_abapgit_exception
+ " isn't visible in the callstack. Therefore we have to check the Events.
+ LOOP AT mt_callstack ASSIGNING .
+
+ IF -mainprogram CP |ZCX_ABAPGIT_EXCEPTION*| " full
+ OR -blockname = `SAVE_CALLSTACK` " merged
+ OR -blockname = `CONSTRUCTOR` " merged
+ OR -blockname CP `RAISE*`. "merged
+ DELETE TABLE mt_callstack FROM .
+ ELSE.
+ EXIT.
+ ENDIF.
+
+ ENDLOOP.
+
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS zcx_abapgit_cancel DEFINITION
+ INHERITING FROM zcx_abapgit_exception
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !textid LIKE if_t100_message=>t100key OPTIONAL
+ !previous LIKE previous OPTIONAL
+ !log TYPE REF TO zif_abapgit_log OPTIONAL
+ !msgv1 TYPE symsgv OPTIONAL
+ !msgv2 TYPE symsgv OPTIONAL
+ !msgv3 TYPE symsgv OPTIONAL
+ !msgv4 TYPE symsgv OPTIONAL
+ !longtext TYPE csequence OPTIONAL.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcx_abapgit_cancel IMPLEMENTATION.
+ METHOD constructor ##ADT_SUPPRESS_GENERATION.
+ super->constructor(
+ previous = previous
+ log = log
+ msgv1 = msgv1
+ msgv2 = msgv2
+ msgv3 = msgv3
+ msgv4 = msgv4
+ longtext = longtext ).
+
+ CLEAR me->textid.
+
+ IF textid IS INITIAL.
+ if_t100_message~t100key = if_t100_message=>default_textid.
+ ELSE.
+ if_t100_message~t100key = textid.
+ ENDIF.
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS zcx_abapgit_not_found DEFINITION
+ INHERITING FROM cx_static_check
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !textid LIKE textid OPTIONAL
+ !previous LIKE previous OPTIONAL.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcx_abapgit_not_found IMPLEMENTATION.
+ METHOD constructor ##ADT_SUPPRESS_GENERATION.
+ super->constructor(
+ textid = textid
+ previous = previous ).
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS zcx_abapgit_type_not_supported DEFINITION
+ INHERITING FROM zcx_abapgit_exception
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS constructor
+ IMPORTING
+ textid LIKE if_t100_message=>t100key OPTIONAL
+ previous LIKE previous OPTIONAL
+ log TYPE REF TO zif_abapgit_log OPTIONAL
+ msgv1 TYPE symsgv OPTIONAL
+ msgv2 TYPE symsgv OPTIONAL
+ msgv3 TYPE symsgv OPTIONAL
+ msgv4 TYPE symsgv OPTIONAL
+ longtext TYPE csequence OPTIONAL
+ obj_type TYPE trobjtype.
+
+ METHODS get_text REDEFINITION.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mv_obj_type TYPE trobjtype.
+ENDCLASS.
+CLASS zcx_abapgit_type_not_supported IMPLEMENTATION.
+
+ METHOD constructor ##ADT_SUPPRESS_GENERATION.
+
+ super->constructor(
+ textid = textid
+ previous = previous
+ log = log
+ msgv1 = msgv1
+ msgv2 = msgv2
+ msgv3 = msgv3
+ msgv4 = msgv4
+ longtext = longtext ).
+
+ mv_obj_type = obj_type.
+
+ ENDMETHOD.
+ METHOD get_text.
+ result = |Object type { mv_obj_type } is not supported by this system|.
+ ENDMETHOD.
+
+ENDCLASS.
+
+INTERFACE zif_abapgit_background .
+ TYPES:
+ BEGIN OF ty_settings,
+ key TYPE string,
+ value TYPE string,
+ END OF ty_settings .
+ TYPES:
+ ty_settings_tt TYPE STANDARD TABLE OF ty_settings WITH DEFAULT KEY .
+
+ CLASS-METHODS get_description
+ RETURNING
+ VALUE(rv_description) TYPE string .
+ CLASS-METHODS get_settings
+ CHANGING
+ ct_settings TYPE ty_settings_tt .
+ METHODS run
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ !ii_log TYPE REF TO zif_abapgit_log
+ !it_settings TYPE ty_settings_tt OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_default_transport.
+
+ TYPES: BEGIN OF ty_get,
+ trfunction TYPE c LENGTH 1,
+ ordernum TYPE trkorr,
+ END OF ty_get.
+
+ METHODS set
+ IMPORTING
+ iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS reset
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get
+ RETURNING
+ VALUE(rs_default_task) TYPE ty_get
+ RAISING
+ zcx_abapgit_exception .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_diff3.
+************************************************************************
+* ABAP Diff3 Interface
+*
+* https://github.com/Marc-Bernard-Tools/ABAP-Diff3
+*
+* This is a port of JavaScript (https://github.com/bhousel/node-diff3, MIT license)
+* https://github.com/bhousel/node-diff3/blob/main/index.d.ts as of 2021-05-04
+*
+* Copyright 2022 Marc Bernard
+* SPDX-License-Identifier: MIT
+************************************************************************
+
+ TYPES ty_number TYPE i.
+
+ TYPES:
+ ty_numbers TYPE STANDARD TABLE OF ty_number WITH DEFAULT KEY.
+
+ TYPES:
+ BEGIN OF ty_number_number,
+ key TYPE ty_number,
+ len TYPE ty_number,
+ END OF ty_number_number.
+
+ TYPES:
+ BEGIN OF ty_lcs_result,
+ key TYPE i,
+ buffer1index TYPE ty_number,
+ buffer2index TYPE ty_number,
+ chain TYPE i, " ref to ilcsresult-key
+ END OF ty_lcs_result.
+ TYPES:
+ ty_lcs_result_t TYPE SORTED TABLE OF ty_lcs_result WITH UNIQUE KEY key.
+
+ TYPES:
+ BEGIN OF ty_comm_result,
+ common TYPE string_table,
+ BEGIN OF diff,
+ buffer1 TYPE string_table,
+ buffer2 TYPE string_table,
+ END OF diff,
+ END OF ty_comm_result.
+ TYPES:
+ ty_comm_result_t TYPE STANDARD TABLE OF ty_comm_result WITH DEFAULT KEY.
+
+ TYPES:
+ BEGIN OF ty_diff_indices_result,
+ buffer1 TYPE ty_number_number,
+ buffer1content TYPE string_table,
+ buffer2 TYPE ty_number_number,
+ buffer2content TYPE string_table,
+ END OF ty_diff_indices_result.
+ TYPES:
+ ty_diff_indices_result_t TYPE STANDARD TABLE OF ty_diff_indices_result WITH DEFAULT KEY.
+
+ TYPES:
+ BEGIN OF ty_chunk,
+ offset TYPE ty_number,
+ length TYPE ty_number,
+ chunk TYPE string_table,
+ END OF ty_chunk.
+
+ TYPES:
+ BEGIN OF ty_patch_result,
+ buffer1 TYPE ty_chunk,
+ buffer2 TYPE ty_chunk,
+ END OF ty_patch_result.
+ TYPES:
+ ty_patch_result_t TYPE STANDARD TABLE OF ty_patch_result WITH DEFAULT KEY.
+
+ TYPES:
+ BEGIN OF ty_stable_region,
+ buffer TYPE c LENGTH 1,
+ buffer_start TYPE ty_number,
+ buffer_length TYPE ty_number,
+ buffer_content TYPE string_table,
+ END OF ty_stable_region.
+ TYPES:
+ BEGIN OF ty_unstable_region,
+ a_start TYPE ty_number,
+ a_length TYPE ty_number,
+ a_content TYPE string_table,
+ b_start TYPE ty_number,
+ b_length TYPE ty_number,
+ b_content TYPE string_table,
+ o_start TYPE ty_number,
+ o_length TYPE ty_number,
+ o_content TYPE string_table,
+ END OF ty_unstable_region.
+
+ TYPES:
+ BEGIN OF ty_region,
+ stable TYPE abap_bool,
+ stable_region TYPE ty_stable_region,
+ unstable_region TYPE ty_unstable_region,
+ END OF ty_region.
+ TYPES:
+ ty_region_t TYPE STANDARD TABLE OF ty_region WITH DEFAULT KEY.
+
+ TYPES:
+ BEGIN OF ty_merge_region,
+ ok TYPE string_table,
+ BEGIN OF conflict,
+ a TYPE string_table,
+ a_index TYPE ty_number,
+ o TYPE string_table,
+ o_index TYPE ty_number,
+ b TYPE string_table,
+ b_index TYPE ty_number,
+ END OF conflict,
+ END OF ty_merge_region.
+ TYPES:
+ ty_merge_region_t TYPE STANDARD TABLE OF ty_merge_region WITH DEFAULT KEY.
+
+ TYPES:
+ BEGIN OF ty_merge_result,
+ conflict TYPE abap_bool,
+ result TYPE string_table,
+ END OF ty_merge_result.
+
+ TYPES:
+ BEGIN OF ty_labels,
+ a TYPE string,
+ o TYPE string,
+ x TYPE string,
+ b TYPE string,
+ END OF ty_labels.
+
+ "! Expects two arrays, finds longest common sequence
+ METHODS lcs
+ IMPORTING
+ !it_buffer1 TYPE string_table
+ !it_buffer2 TYPE string_table
+ RETURNING
+ VALUE(rt_result) TYPE ty_lcs_result_t.
+
+ "! We apply the LCS to build a 'comm'-style picture of the
+ "! differences between buffer1 and buffer2.
+ METHODS diff_comm
+ IMPORTING
+ !it_buffer1 TYPE string_table
+ !it_buffer2 TYPE string_table
+ RETURNING
+ VALUE(rt_result) TYPE ty_comm_result_t.
+
+ "! We apply the LCS to give a simple representation of the
+ "! offsets and lengths of mismatched chunks in the input
+ "! buffers. This is used by diff3MergeRegions.
+ METHODS diff_indices
+ IMPORTING
+ !it_buffer1 TYPE string_table
+ !it_buffer2 TYPE string_table
+ RETURNING
+ VALUE(rt_result) TYPE ty_diff_indices_result_t.
+
+ "! We apply the LCS to build a JSON representation of a
+ "! diff(1)-style patch.
+ METHODS diff_patch
+ IMPORTING
+ !it_buffer1 TYPE string_table
+ !it_buffer2 TYPE string_table
+ RETURNING
+ VALUE(rt_result) TYPE ty_patch_result_t.
+
+ METHODS patch
+ IMPORTING
+ !it_buffer TYPE string_table
+ !it_patchres TYPE ty_patch_result_t
+ RETURNING
+ VALUE(rt_result) TYPE string_table.
+
+ "! Takes the output of diffPatch(), and removes extra information from it.
+ "! It can still be used by patch(), below, but can no longer be inverted.
+ METHODS strip_patch
+ IMPORTING
+ !it_patchres TYPE ty_patch_result_t
+ RETURNING
+ VALUE(rt_result) TYPE ty_patch_result_t.
+
+ "! Takes the output of diffPatch(), and inverts the sense of it, so that it
+ "! can be applied to buffer2 to give buffer1 rather than the other way around.
+ METHODS invert_patch
+ IMPORTING
+ !it_patchres TYPE ty_patch_result_t
+ RETURNING
+ VALUE(rt_result) TYPE ty_patch_result_t.
+
+ "! Given three buffers, A, O, and B, where both A and B are
+ "! independently derived from O, returns a fairly complicated
+ "! internal representation of merge decisions it's taken. The
+ "! interested reader may wish to consult
+ "!
+ "! Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.
+ "! 'A Formal Investigation of ' In Arvind and Prasad,
+ "! editors, Foundations of Software Technology and Theoretical
+ "! Computer Science (FSTTCS), December 2007.
+ "!
+ "! (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)
+ METHODS diff3_merge_regions
+ IMPORTING
+ !it_a TYPE string_table
+ !it_o TYPE string_table
+ !it_b TYPE string_table
+ RETURNING
+ VALUE(rt_result) TYPE ty_region_t.
+
+ "! Applies the output of diff3MergeRegions to actually
+ "! construct the merged buffer; the returned result alternates
+ "! between 'ok' and 'conflict' blocks.
+ "! A "false conflict" is where `a` and `b` both change the same from `o`
+ METHODS diff3_merge
+ IMPORTING
+ !it_a TYPE string_table
+ !it_o TYPE string_table
+ !it_b TYPE string_table
+ !iv_exclude_false_conflicts TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rt_result) TYPE ty_merge_region_t.
+
+ METHODS merge
+ IMPORTING
+ !it_a TYPE string_table
+ !it_o TYPE string_table
+ !it_b TYPE string_table
+ !iv_exclude_false_conflicts TYPE abap_bool DEFAULT abap_true
+ !is_labels TYPE ty_labels OPTIONAL
+ RETURNING
+ VALUE(rs_result) TYPE ty_merge_result.
+
+ METHODS merge_diff3
+ IMPORTING
+ !it_a TYPE string_table
+ !it_o TYPE string_table
+ !it_b TYPE string_table
+ !iv_exclude_false_conflicts TYPE abap_bool DEFAULT abap_true
+ !is_labels TYPE ty_labels OPTIONAL
+ RETURNING
+ VALUE(rs_result) TYPE ty_merge_result.
+
+ METHODS merge_dig_in
+ IMPORTING
+ !it_a TYPE string_table
+ !it_o TYPE string_table
+ !it_b TYPE string_table
+ !iv_exclude_false_conflicts TYPE abap_bool DEFAULT abap_true
+ !is_labels TYPE ty_labels OPTIONAL
+ RETURNING
+ VALUE(rs_result) TYPE ty_merge_result.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_environment.
+ TYPES:
+ BEGIN OF ty_release_sp,
+ release TYPE c LENGTH 10,
+ sp TYPE c LENGTH 10,
+ END OF ty_release_sp,
+ ty_system_language_filter TYPE RANGE OF spras.
+
+ METHODS is_sap_cloud_platform
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+ METHODS is_merged
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+ METHODS is_repo_object_changes_allowed
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+ METHODS compare_with_inactive
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+ METHODS is_restart_required
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+ METHODS is_sap_object_allowed
+ RETURNING
+ VALUE(rv_allowed) TYPE abap_bool.
+ METHODS get_basis_release
+ RETURNING
+ VALUE(rs_result) TYPE ty_release_sp.
+ METHODS get_system_language_filter
+ RETURNING
+ VALUE(rt_system_language_filter) TYPE ty_system_language_filter.
+ METHODS is_variant_maintenance
+ RETURNING
+ VALUE(rv_is_variant_maintenance) TYPE abap_bool.
+ METHODS init_parallel_processing
+ IMPORTING
+ iv_group TYPE clike
+ RETURNING
+ VALUE(rv_free_work_processes) TYPE i.
+ METHODS check_parallel_processing
+ IMPORTING
+ iv_group TYPE clike
+ RETURNING
+ VALUE(rv_checked) TYPE abap_bool.
+ METHODS get_available_user_sessions
+ RETURNING
+ VALUE(rv_sessions) TYPE i.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_user_record.
+
+ METHODS get_name
+ IMPORTING
+ iv_username TYPE sy-uname
+ RETURNING
+ VALUE(rv_name) TYPE string.
+
+ METHODS get_email
+ IMPORTING
+ iv_username TYPE sy-uname
+ RETURNING
+ VALUE(rv_email) TYPE string.
+
+ METHODS get_title
+ IMPORTING
+ iv_username TYPE sy-uname
+ RETURNING
+ VALUE(rv_title) TYPE string.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_auth.
+
+ TYPES: ty_authorization TYPE string.
+
+ CONSTANTS: BEGIN OF c_authorization,
+ startup TYPE ty_authorization VALUE 'STARTUP',
+ uninstall TYPE ty_authorization VALUE 'UNINSTALL',
+ create_repo TYPE ty_authorization VALUE 'CREATE_REPO',
+ transport_to_branch TYPE ty_authorization VALUE 'TRANSPORT_TO_BRANCH',
+ update_local_checksum TYPE ty_authorization VALUE 'UPDATE_LOCAL_CHECKSUM',
+ END OF c_authorization.
+
+ METHODS:
+ is_allowed
+ IMPORTING iv_authorization TYPE ty_authorization
+ iv_param TYPE string OPTIONAL
+ RETURNING VALUE(rv_allowed) TYPE abap_bool.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_git_definitions .
+* this interface is self contained
+* only references to built in types
+* git does not know the concept of TADIR objects, only knows files
+ TYPES:
+ ty_type TYPE c LENGTH 6 .
+ TYPES:
+ ty_bitbyte TYPE c LENGTH 8 .
+ TYPES:
+ ty_sha1 TYPE c LENGTH 40 .
+ TYPES: ty_sha1_tt TYPE STANDARD TABLE OF ty_sha1 WITH DEFAULT KEY .
+ TYPES:
+ ty_adler32 TYPE x LENGTH 4 .
+
+ TYPES ty_item_state TYPE c LENGTH 1.
+ TYPES:
+ BEGIN OF ty_file_signature,
+ path TYPE string,
+ filename TYPE string,
+ sha1 TYPE ty_sha1,
+ END OF ty_file_signature .
+ TYPES:
+ ty_file_signatures_tt TYPE STANDARD TABLE OF
+ ty_file_signature WITH DEFAULT KEY .
+ TYPES:
+ ty_file_signatures_ts TYPE SORTED TABLE OF
+ ty_file_signature WITH UNIQUE KEY path filename .
+ TYPES:
+ BEGIN OF ty_file.
+ INCLUDE TYPE ty_file_signature.
+ TYPES: data TYPE xstring,
+ END OF ty_file .
+ TYPES:
+ ty_files_tt TYPE STANDARD TABLE OF ty_file WITH DEFAULT KEY
+ WITH UNIQUE SORTED KEY file_path COMPONENTS path filename
+ WITH NON-UNIQUE SORTED KEY file COMPONENTS filename.
+
+ TYPES ty_git_branch_type TYPE c LENGTH 2 .
+ TYPES:
+ BEGIN OF ty_git_branch,
+ sha1 TYPE ty_sha1,
+ name TYPE string,
+ type TYPE ty_git_branch_type,
+ is_head TYPE abap_bool,
+ display_name TYPE string,
+ END OF ty_git_branch .
+ TYPES:
+ ty_git_branch_list_tt TYPE STANDARD TABLE OF ty_git_branch WITH DEFAULT KEY
+ WITH NON-UNIQUE SORTED KEY name_key
+ COMPONENTS name.
+ TYPES:
+ BEGIN OF ty_git_tag,
+ sha1 TYPE ty_sha1,
+ object TYPE ty_sha1,
+ name TYPE string,
+ type TYPE ty_git_branch_type,
+ display_name TYPE string,
+ tagger_name TYPE string,
+ tagger_email TYPE string,
+ message TYPE string,
+ body TYPE string,
+ END OF ty_git_tag .
+ TYPES:
+ BEGIN OF ty_git_user,
+ name TYPE string,
+ email TYPE string,
+ END OF ty_git_user .
+ TYPES:
+ BEGIN OF ty_comment,
+ committer TYPE ty_git_user,
+ author TYPE ty_git_user,
+ comment TYPE string,
+ END OF ty_comment .
+
+ TYPES:
+ ty_chmod TYPE c LENGTH 6 .
+
+ CONSTANTS:
+ BEGIN OF c_chmod,
+ file TYPE ty_chmod VALUE '100644',
+ executable TYPE ty_chmod VALUE '100755',
+ dir TYPE ty_chmod VALUE '40000 ',
+ submodule TYPE ty_chmod VALUE '160000',
+ symbolic_link TYPE ty_chmod VALUE '120000',
+ END OF c_chmod .
+
+ TYPES:
+ BEGIN OF ty_expanded,
+ path TYPE string,
+ name TYPE string,
+ sha1 TYPE ty_sha1,
+ chmod TYPE ty_chmod,
+ END OF ty_expanded .
+ TYPES:
+ ty_expanded_tt TYPE STANDARD TABLE OF ty_expanded WITH DEFAULT KEY
+ WITH NON-UNIQUE SORTED KEY path_name COMPONENTS path name.
+
+ TYPES:
+ BEGIN OF ty_create,
+ name TYPE string,
+ parent TYPE string,
+ END OF ty_create .
+ TYPES:
+ BEGIN OF ty_commit,
+ sha1 TYPE ty_sha1,
+ parent1 TYPE ty_sha1,
+ parent2 TYPE ty_sha1,
+ author TYPE string,
+ email TYPE string,
+ time TYPE string,
+ message TYPE string,
+ body TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
+ branch TYPE string,
+ merge TYPE string,
+ tags TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
+ create TYPE STANDARD TABLE OF ty_create WITH DEFAULT KEY,
+ compressed TYPE abap_bool,
+ END OF ty_commit .
+ TYPES:
+ ty_commit_tt TYPE STANDARD TABLE OF ty_commit WITH DEFAULT KEY .
+
+ CONSTANTS:
+ BEGIN OF c_type,
+ commit TYPE ty_type VALUE 'commit', "#EC NOTEXT
+ tree TYPE ty_type VALUE 'tree', "#EC NOTEXT
+ ref_d TYPE ty_type VALUE 'ref_d', "#EC NOTEXT
+ tag TYPE ty_type VALUE 'tag', "#EC NOTEXT
+ blob TYPE ty_type VALUE 'blob', "#EC NOTEXT
+ END OF c_type .
+
+ CONSTANTS:
+ BEGIN OF c_git_branch_type,
+ branch TYPE ty_git_branch_type VALUE 'HD',
+ lightweight_tag TYPE ty_git_branch_type VALUE 'TG',
+ annotated_tag TYPE ty_git_branch_type VALUE 'AT',
+ other TYPE ty_git_branch_type VALUE 'ZZ',
+ END OF c_git_branch_type .
+ CONSTANTS c_head_name TYPE string VALUE 'HEAD' ##NO_TEXT.
+ CONSTANTS:
+ BEGIN OF c_git_branch,
+ main TYPE string VALUE 'refs/heads/main',
+ prefix TYPE string VALUE 'refs/',
+ heads_prefix TYPE string VALUE 'refs/heads/',
+ heads TYPE string VALUE 'refs/heads/*',
+ tags_prefix TYPE string VALUE 'refs/tags/',
+ tags TYPE string VALUE 'refs/tags/*',
+ peel TYPE string VALUE '^{}',
+ END OF c_git_branch.
+
+ TYPES ty_head_type TYPE c LENGTH 1.
+ CONSTANTS:
+ BEGIN OF c_head_types,
+ all TYPE ty_head_type VALUE 'A',
+ branch TYPE ty_head_type VALUE 'B',
+ tag TYPE ty_head_type VALUE 'T',
+ commit TYPE ty_head_type VALUE 'C',
+ pull_request TYPE ty_head_type VALUE 'P',
+ END OF c_head_types.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_data_config .
+ TYPES:
+ ty_data_type TYPE c LENGTH 4 .
+ TYPES:
+ BEGIN OF ty_config,
+ type TYPE ty_data_type,
+ name TYPE tadir-obj_name,
+ skip_initial TYPE abap_bool,
+ where TYPE string_table,
+ END OF ty_config .
+ TYPES:
+ 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 c_default_format TYPE string VALUE 'json' ##NO_TEXT.
+ CONSTANTS c_config TYPE string VALUE 'conf' ##NO_TEXT.
+ CONSTANTS:
+ BEGIN OF c_data_type,
+ tabu TYPE ty_data_type VALUE 'TABU',
+ vdat TYPE ty_data_type VALUE 'VDAT',
+ cdat TYPE ty_data_type VALUE 'CDAT',
+ tdat TYPE ty_data_type VALUE 'TDAT',
+ END OF c_data_type .
+
+ METHODS add_config
+ IMPORTING
+ !is_config TYPE ty_config
+ RAISING
+ zcx_abapgit_exception .
+ METHODS from_json
+ IMPORTING
+ !it_files TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_configs
+ RETURNING
+ VALUE(rt_configs) TYPE ty_config_tt .
+ METHODS remove_config
+ IMPORTING
+ !is_config TYPE ty_config
+ RAISING
+ zcx_abapgit_exception .
+ METHODS to_json
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS update_config
+ IMPORTING
+ !is_config TYPE ty_config
+ RAISING
+ zcx_abapgit_exception .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_data_serializer .
+ METHODS serialize
+ IMPORTING
+ !ii_config TYPE REF TO zif_abapgit_data_config
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_data_supporter.
+
+ TYPES:
+ BEGIN OF ty_object,
+ type TYPE zif_abapgit_data_config=>ty_config-type,
+ name TYPE zif_abapgit_data_config=>ty_config-name,
+ END OF ty_object.
+ TYPES:
+ ty_objects TYPE SORTED TABLE OF ty_object WITH UNIQUE KEY type name.
+
+ METHODS is_object_supported
+ IMPORTING
+ !iv_type TYPE ty_object-type
+ !iv_name TYPE ty_object-name
+ RETURNING
+ VALUE(rv_supported) TYPE abap_bool.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_git_branch_list.
+
+ METHODS find_by_name
+ IMPORTING
+ !iv_branch_name TYPE clike
+ RETURNING
+ VALUE(rs_branch) TYPE zif_abapgit_git_definitions=>ty_git_branch
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_head_symref
+ RETURNING
+ VALUE(rv_head_symref) TYPE string .
+ METHODS get_all
+ RETURNING
+ VALUE(rt_branches) TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_branches_only
+ RETURNING
+ VALUE(rt_branches) TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_tags_only
+ RETURNING
+ VALUE(rt_tags) TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_git_transport .
+ METHODS branches
+ IMPORTING
+ iv_url TYPE string
+ RETURNING
+ VALUE(ri_branch_list) TYPE REF TO zif_abapgit_git_branch_list
+ RAISING
+ zcx_abapgit_exception .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_pr_enum_provider .
+
+ TYPES:
+ BEGIN OF ty_pull_request,
+ base_url TYPE string,
+ number TYPE string,
+ title TYPE string,
+ user TYPE string,
+ head_url TYPE string,
+ head_branch TYPE string,
+ created_at TYPE string, " TODO change to D after date parsing fixed
+ is_for_upstream TYPE abap_bool,
+ draft TYPE abap_bool,
+ html_url TYPE string,
+ END OF ty_pull_request.
+ TYPES:
+ ty_pull_requests TYPE STANDARD TABLE OF ty_pull_request WITH KEY base_url number.
+
+ METHODS list_pull_requests
+ RETURNING
+ VALUE(rt_pulls) TYPE ty_pull_requests
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS create_repository
+ IMPORTING
+ iv_description TYPE string OPTIONAL
+ iv_is_org TYPE abap_bool DEFAULT abap_true
+ iv_private TYPE abap_bool DEFAULT abap_true
+ iv_auto_init TYPE abap_bool DEFAULT abap_true
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS create_initial_branch
+ IMPORTING
+ iv_readme TYPE string OPTIONAL
+ iv_branch_name TYPE string DEFAULT 'main'
+ RETURNING
+ VALUE(rv_branch_name) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_http_agent .
+
+ CONSTANTS:
+ BEGIN OF c_methods,
+ get TYPE string VALUE 'GET',
+ post TYPE string VALUE 'POST',
+ put TYPE string VALUE 'PUT',
+ delete TYPE string VALUE 'DELETE',
+ patch TYPE string VALUE 'PATCH',
+ END OF c_methods.
+
+ METHODS global_headers
+ RETURNING
+ VALUE(ro_global_headers) TYPE REF TO zcl_abapgit_string_map.
+
+ METHODS request
+ IMPORTING
+ !iv_url TYPE string
+ !iv_method TYPE string DEFAULT c_methods-get
+ !io_query TYPE REF TO zcl_abapgit_string_map OPTIONAL
+ !io_headers TYPE REF TO zcl_abapgit_string_map OPTIONAL
+ !iv_payload TYPE any OPTIONAL " can be string, xstring
+ RETURNING
+ VALUE(ri_response) TYPE REF TO zif_abapgit_http_response
+ RAISING
+ zcx_abapgit_exception .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_http_response .
+ METHODS data
+ RETURNING
+ VALUE(rv_data) TYPE xstring .
+ METHODS cdata
+ RETURNING
+ VALUE(rv_data) TYPE string .
+ METHODS json
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error .
+ METHODS is_ok
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+ METHODS code
+ RETURNING
+ VALUE(rv_code) TYPE i .
+ METHODS error
+ RETURNING
+ VALUE(rv_message) TYPE string .
+ METHODS headers
+ RETURNING
+ VALUE(ro_headers) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+ METHODS close .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_code_inspector .
+
+ TYPES: BEGIN OF ty_result,
+ objtype TYPE tadir-object,
+ objname TYPE tadir-obj_name,
+ sobjtype TYPE c LENGTH 4,
+ sobjname TYPE c LENGTH 40,
+ kind TYPE c LENGTH 1,
+ line TYPE n LENGTH 6,
+ col TYPE n LENGTH 4,
+ code TYPE c LENGTH 10,
+ test TYPE c LENGTH 30,
+ text TYPE string,
+ param1 TYPE c LENGTH 80,
+ param2 TYPE c LENGTH 20,
+ param3 TYPE c LENGTH 20,
+ param4 TYPE c LENGTH 20,
+ detail TYPE xstring,
+ author TYPE c LENGTH 12,
+ END OF ty_result.
+
+ TYPES ty_results TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY.
+
+ TYPES: BEGIN OF ty_variant,
+ name TYPE sci_chkv,
+ description TYPE string,
+ END OF ty_variant.
+
+ TYPES ty_variants TYPE STANDARD TABLE OF ty_variant WITH DEFAULT KEY.
+
+ METHODS run
+ IMPORTING
+ !iv_variant TYPE sci_chkv
+ !iv_save TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rt_list) TYPE ty_results
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS is_successful
+ RETURNING
+ VALUE(rv_success) TYPE abap_bool .
+
+ METHODS get_summary
+ RETURNING
+ VALUE(rv_summary) TYPE string.
+
+ METHODS validate_check_variant
+ IMPORTING
+ !iv_check_variant_name TYPE sci_chkv
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS list_global_variants
+ RETURNING
+ VALUE(rt_list) TYPE ty_variants.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_ajson_iterator.
+
+ METHODS has_next
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+
+ METHODS next
+ RETURNING
+ VALUE(ri_item) TYPE REF TO zif_abapgit_ajson.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_ajson_types.
+
+ TYPES:
+ ty_node_type TYPE string.
+
+ CONSTANTS:
+ BEGIN OF node_type,
+ boolean TYPE ty_node_type VALUE 'bool',
+ string TYPE ty_node_type VALUE 'str',
+ number TYPE ty_node_type VALUE 'num',
+ null TYPE ty_node_type VALUE 'null',
+ array TYPE ty_node_type VALUE 'array',
+ object TYPE ty_node_type VALUE 'object',
+ END OF node_type.
+
+ TYPES:
+ BEGIN OF ty_node,
+ path TYPE string,
+ name TYPE string,
+ type TYPE ty_node_type,
+ value TYPE string,
+ index TYPE i,
+ order TYPE i,
+ children TYPE i,
+ END OF ty_node.
+ TYPES:
+ ty_nodes_tt TYPE STANDARD TABLE OF ty_node WITH KEY path name.
+ TYPES:
+ ty_nodes_ts TYPE SORTED TABLE OF ty_node
+ WITH UNIQUE KEY path name
+ WITH NON-UNIQUE SORTED KEY array_index COMPONENTS path index
+ WITH NON-UNIQUE SORTED KEY item_order COMPONENTS path order.
+
+ TYPES:
+ BEGIN OF ty_path_name,
+ path TYPE string,
+ name TYPE string,
+ END OF ty_path_name.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_ajson.
+
+ CONSTANTS version TYPE string VALUE 'v1.1.13'. "#EC NOTEXT
+ CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. "#EC NOTEXT
+ CONSTANTS license TYPE string VALUE 'MIT'. "#EC NOTEXT
+
+ TYPES:
+ BEGIN OF ty_opts,
+ read_only TYPE abap_bool,
+ keep_item_order TYPE abap_bool,
+ format_datetime TYPE abap_bool,
+ to_abap_corresponding_only TYPE abap_bool,
+ END OF ty_opts.
+
+ " DATA
+
+ DATA mt_json_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts READ-ONLY.
+
+ " CLONING
+
+ METHODS clone
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+ METHODS filter
+ IMPORTING
+ ii_filter TYPE REF TO zif_abapgit_ajson_filter
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+ METHODS map
+ IMPORTING
+ ii_mapper TYPE REF TO zif_abapgit_ajson_mapping
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ " METHODS
+
+ METHODS freeze.
+ METHODS keep_item_order
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson.
+ METHODS format_datetime
+ IMPORTING
+ iv_use_iso TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson.
+ METHODS to_abap_corresponding_only
+ IMPORTING
+ iv_enable TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson.
+ METHODS opts
+ RETURNING
+ VALUE(rs_opts) TYPE ty_opts.
+
+ " METHODS ex.reader
+
+ METHODS is_empty
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+
+ METHODS exists
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_exists) TYPE abap_bool.
+
+ METHODS members
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rt_members) TYPE string_table.
+
+ METHODS get
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_value) TYPE string.
+
+ METHODS get_node_type
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_node_type) TYPE zif_abapgit_ajson_types=>ty_node_type.
+
+ METHODS get_boolean
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_value) TYPE abap_bool.
+
+ METHODS get_integer
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_value) TYPE i.
+
+ METHODS get_number
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_value) TYPE f.
+
+ METHODS get_date
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_value) TYPE d.
+
+ METHODS get_timestamp
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_value) TYPE timestamp.
+
+ METHODS get_timestampl
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_value) TYPE timestampl.
+
+ METHODS get_string
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_value) TYPE string.
+
+ METHODS slice
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson.
+
+ METHODS to_abap
+ IMPORTING
+ iv_corresponding TYPE abap_bool DEFAULT abap_false
+ ii_refs_initiator TYPE REF TO zif_abapgit_ajson_ref_init OPTIONAL
+ EXPORTING
+ ev_container TYPE any
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS array_to_string_table
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rt_string_table) TYPE string_table
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ " METHODS ex.writer
+
+ METHODS clear
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS set
+ IMPORTING
+ iv_path TYPE string
+ iv_val TYPE any
+ iv_ignore_empty TYPE abap_bool DEFAULT abap_true
+ iv_node_type TYPE zif_abapgit_ajson_types=>ty_node_type OPTIONAL
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS setx
+ IMPORTING
+ iv_param TYPE string
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS set_boolean
+ IMPORTING
+ iv_path TYPE string
+ iv_val TYPE any
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS set_string
+ IMPORTING
+ iv_path TYPE string
+ iv_val TYPE clike
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS set_integer
+ IMPORTING
+ iv_path TYPE string
+ iv_val TYPE i
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS set_date
+ IMPORTING
+ iv_path TYPE string
+ iv_val TYPE d
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS set_timestamp
+ IMPORTING
+ iv_path TYPE string
+ iv_val TYPE timestamp
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS set_timestampl
+ IMPORTING
+ iv_path TYPE string
+ iv_val TYPE timestampl
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS set_null
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS delete
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS touch_array
+ IMPORTING
+ iv_path TYPE string
+ iv_clear TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS push
+ IMPORTING
+ iv_path TYPE string
+ iv_val TYPE any
+ RETURNING
+ VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS stringify
+ IMPORTING
+ iv_indent TYPE i DEFAULT 0
+ RETURNING
+ VALUE(rv_json) TYPE string
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_ajson_filter.
+
+ TYPES ty_filter_tab TYPE STANDARD TABLE OF REF TO zif_abapgit_ajson_filter WITH KEY table_line.
+ TYPES ty_visit_type TYPE i.
+
+ CONSTANTS:
+ BEGIN OF visit_type,
+ value TYPE ty_visit_type VALUE 0,
+ open TYPE ty_visit_type VALUE 1,
+ close TYPE ty_visit_type VALUE 2,
+ END OF visit_type.
+
+ METHODS keep_node
+ IMPORTING
+ is_node TYPE zif_abapgit_ajson_types=>ty_node
+ iv_visit TYPE ty_visit_type DEFAULT visit_type-value
+ RETURNING
+ VALUE(rv_keep) TYPE abap_bool
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_ajson_mapping.
+
+ TYPES:
+ BEGIN OF ty_mapping_field, " deprecated, will be removed
+ abap TYPE string,
+ json TYPE string,
+ END OF ty_mapping_field,
+ ty_mapping_fields TYPE STANDARD TABLE OF ty_mapping_field
+ WITH UNIQUE SORTED KEY abap COMPONENTS abap
+ WITH UNIQUE SORTED KEY json COMPONENTS json.
+
+ TYPES:
+ BEGIN OF ty_rename,
+ from TYPE string,
+ to TYPE string,
+ END OF ty_rename,
+ tty_rename_map TYPE STANDARD TABLE OF ty_rename
+ WITH UNIQUE SORTED KEY by_name COMPONENTS from.
+
+ TYPES:
+ ty_table_of TYPE STANDARD TABLE OF REF TO zif_abapgit_ajson_mapping.
+
+ METHODS to_abap " deprecated, will be removed
+ IMPORTING
+ !iv_path TYPE string
+ !iv_name TYPE string
+ RETURNING
+ VALUE(rv_result) TYPE string.
+
+ METHODS to_json " deprecated, will be removed
+ IMPORTING
+ !iv_path TYPE string
+ !iv_name TYPE string
+ RETURNING
+ VALUE(rv_result) TYPE string.
+
+ METHODS rename_node
+ IMPORTING
+ !is_node TYPE zif_abapgit_ajson_types=>ty_node
+ CHANGING
+ !cv_name TYPE zif_abapgit_ajson_types=>ty_node-name.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_ajson_ref_init.
+
+ TYPES:
+ BEGIN OF ty_data_ref,
+ path TYPE string,
+ name TYPE string,
+ dref TYPE REF TO data,
+ END OF ty_data_ref.
+ TYPES:
+ tty_data_refs TYPE STANDARD TABLE OF ty_data_ref
+ WITH UNIQUE SORTED KEY by_path COMPONENTS path name.
+
+ METHODS get_data_ref
+ IMPORTING
+ !is_node TYPE zif_abapgit_ajson_types=>ty_node
+ RETURNING
+ VALUE(ro_ref) TYPE REF TO data.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_aff_registry .
+
+ METHODS:
+ "! Returns TRUE if the object type is supported by ABAP file formats (AFF) in abapGit.
+ "! Either there is a (standalone AFF capable) object handler,
+ "! or object handler calls the AFF framework in newer ABAP systems.
+ is_supported_object_type
+ IMPORTING
+ iv_obj_type TYPE tadir-object
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_aff_type_mapping .
+ METHODS:
+ "! Convert from AFF to abapGit data
+ "!
+ "! @parameter iv_data | ABAP data as AFF type
+ "! @parameter iv_object_name | Name of object
+ "! @parameter es_data | ABAP data as abapGit type
+ to_abapgit
+ IMPORTING iv_data TYPE data
+ iv_object_name TYPE sobj_name
+ EXPORTING es_data TYPE data,
+
+ "! Converts to AFF specific meta data
+ "!
+ "! @parameter iv_data | (meta-)data of the object
+ "! @parameter es_data | aff data of the object, e.g. zif_abapgit_aff_intf_v1=>ty_main
+ to_aff
+ IMPORTING iv_data TYPE data
+ EXPORTING es_data TYPE data.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_aff_types_v1.
+
+ TYPES ty_format_version TYPE string.
+
+ TYPES ty_abap_language_version TYPE c LENGTH 1.
+
+ TYPES ty_abap_language_version_cloud TYPE c LENGTH 1.
+
+ TYPES ty_abap_language_version_src TYPE c LENGTH 1.
+
+ CONSTANTS:
+ BEGIN OF co_abap_language_version_src,
+ standard TYPE ty_abap_language_version_src VALUE 'X',
+ key_user TYPE ty_abap_language_version_src VALUE '2',
+ cloud_development TYPE ty_abap_language_version_src VALUE '5',
+ END OF co_abap_language_version_src.
+
+ CONSTANTS:
+ BEGIN OF co_abap_language_version,
+ standard TYPE ty_abap_language_version VALUE space,
+ key_user TYPE ty_abap_language_version VALUE '2',
+ cloud_development TYPE ty_abap_language_version VALUE '5',
+ END OF co_abap_language_version.
+
+ CONSTANTS:
+ BEGIN OF co_abap_language_version_cloud,
+ standard TYPE ty_abap_language_version_cloud VALUE space,
+ cloud_development TYPE ty_abap_language_version_cloud VALUE '5',
+ END OF co_abap_language_version_cloud.
+
+ TYPES ty_description_60 TYPE c LENGTH 60.
+ TYPES ty_description_100 TYPE c LENGTH 100.
+
+ TYPES ty_object_name_30 TYPE c LENGTH 30.
+
+ TYPES ty_original_language TYPE sy-langu.
+
+ TYPES:
+ BEGIN OF ty_header_60_src,
+ description TYPE ty_description_60,
+ original_language TYPE ty_original_language,
+ abap_language_version TYPE ty_abap_language_version_src,
+ END OF ty_header_60_src.
+
+ TYPES:
+ BEGIN OF ty_header_60_cloud,
+ description TYPE ty_description_60,
+ original_language TYPE ty_original_language,
+ abap_language_version TYPE ty_abap_language_version_cloud,
+ END OF ty_header_60_cloud.
+
+ TYPES:
+ BEGIN OF ty_header_60,
+ description TYPE ty_description_60,
+ original_language TYPE ty_original_language,
+ abap_language_version TYPE ty_abap_language_version,
+ END OF ty_header_60.
+
+ TYPES:
+ BEGIN OF ty_header_60_no_abap_lv,
+ description TYPE ty_description_60,
+ original_language TYPE ty_original_language,
+ END OF ty_header_60_no_abap_lv.
+
+ TYPES:
+ BEGIN OF ty_header_100,
+ description TYPE ty_description_100,
+ original_language TYPE ty_original_language,
+ abap_language_version TYPE ty_abap_language_version,
+ END OF ty_header_100.
+
+ TYPES:
+ BEGIN OF ty_header_only_description,
+ description TYPE ty_description_60,
+ END OF ty_header_only_description.
+
+ TYPES ty_option TYPE c LENGTH 2.
+
+ CONSTANTS:
+ BEGIN OF co_option,
+ equals TYPE ty_option VALUE 'EQ',
+ between TYPE ty_option VALUE 'BT',
+ greater_than TYPE ty_option VALUE 'GT',
+ contains_pattern TYPE ty_option VALUE 'CP',
+ not_equal TYPE ty_option VALUE 'NE',
+ not_between TYPE ty_option VALUE 'NB',
+ not_contains_pattern TYPE ty_option VALUE 'NP',
+ greater_equal TYPE ty_option VALUE 'GE',
+ less_than TYPE ty_option VALUE 'LT',
+ less_equal TYPE ty_option VALUE 'LE',
+ END OF co_option.
+
+ TYPES ty_sign TYPE c LENGTH 1.
+
+ CONSTANTS:
+ BEGIN OF co_sign,
+ include TYPE ty_sign VALUE 'I',
+ exclude TYPE ty_sign VALUE 'E',
+ END OF co_sign.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_aff_oo_types_v1.
+
+ TYPES:
+ BEGIN OF ty_component_description,
+ name TYPE zif_abapgit_aff_types_v1=>ty_object_name_30,
+ description TYPE zif_abapgit_aff_types_v1=>ty_description_60,
+ END OF ty_component_description,
+
+ ty_component_descriptions TYPE SORTED TABLE OF ty_component_description WITH UNIQUE KEY name.
+ TYPES:
+ BEGIN OF ty_method,
+ name TYPE zif_abapgit_aff_types_v1=>ty_object_name_30,
+ description TYPE zif_abapgit_aff_types_v1=>ty_description_60,
+ parameters TYPE ty_component_descriptions,
+ exceptions TYPE ty_component_descriptions,
+ END OF ty_method,
+ ty_methods TYPE SORTED TABLE OF ty_method WITH UNIQUE KEY name.
+
+ TYPES:
+ BEGIN OF ty_event,
+ name TYPE zif_abapgit_aff_types_v1=>ty_object_name_30,
+ description TYPE zif_abapgit_aff_types_v1=>ty_description_60,
+ parameters TYPE ty_component_descriptions,
+ END OF ty_event,
+ ty_events TYPE SORTED TABLE OF ty_event WITH UNIQUE KEY name.
+
+ TYPES:
+ BEGIN OF ty_descriptions,
+ types TYPE ty_component_descriptions,
+ attributes TYPE ty_component_descriptions,
+ events TYPE ty_events,
+ methods TYPE ty_methods,
+ END OF ty_descriptions.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_aff_intf_v1.
+
+ TYPES ty_category TYPE n LENGTH 2.
+
+ CONSTANTS:
+ BEGIN OF co_category,
+ general TYPE ty_category VALUE '00',
+ classic_badi TYPE ty_category VALUE '01',
+ business_static_components TYPE ty_category VALUE '51',
+ business_instance_components TYPE ty_category VALUE '52',
+ db_procedure_proxy TYPE ty_category VALUE '65',
+ web_dynpro_runtime TYPE ty_category VALUE '80',
+ enterprise_service TYPE ty_category VALUE '90',
+ END OF co_category.
+
+ TYPES:
+ BEGIN OF ty_main,
+ format_version TYPE zif_abapgit_aff_types_v1=>ty_format_version,
+ header TYPE zif_abapgit_aff_types_v1=>ty_header_60_src,
+ category TYPE ty_category,
+ proxy TYPE abap_bool,
+ descriptions TYPE zif_abapgit_aff_oo_types_v1=>ty_descriptions,
+ END OF ty_main.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_ecatt .
+
+ " downport missing types
+
+ TYPES:
+ ty_invert_validation TYPE c LENGTH 1,
+ ty_error_prio TYPE n LENGTH 1,
+ ty_impl_name TYPE c LENGTH 30,
+ ty_impl_type TYPE c LENGTH 1,
+ ty_impl_subtype TYPE c LENGTH 4,
+ ty_package TYPE c LENGTH 255,
+ BEGIN OF ty_impl_det,
+ impl_name TYPE ty_impl_name,
+ impl_type TYPE ty_impl_type,
+ impl_subtype TYPE ty_impl_subtype,
+ impl_package TYPE ty_package,
+ END OF ty_impl_det.
+
+ TYPES:
+ BEGIN OF ty_bus_msg.
+ INCLUDE TYPE etobj_key.
+ TYPES:
+ bus_msg_no TYPE c LENGTH 1, " ty_msg_no
+ arbgb TYPE arbgb,
+ msgnr TYPE msgnr,
+ bus_msg_text TYPE string, "ty_bus_msg_text
+ otr_key TYPE sotr_conc,
+ msg_type TYPE c LENGTH 4, "ty_msg_type
+ END OF ty_bus_msg,
+
+ ty_bus_msgs TYPE STANDARD TABLE OF ty_bus_msg.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_ecatt_download .
+
+ METHODS:
+ get_xml_stream
+ RETURNING
+ VALUE(rv_xml_stream) TYPE xstring.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_ecatt_upload .
+ METHODS:
+ set_stream_for_upload
+ IMPORTING
+ iv_xml TYPE xstring.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_object_enho.
+
+ METHODS:
+ deserialize
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
+ iv_package TYPE devclass
+ RAISING zcx_abapgit_exception,
+ serialize
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_output
+ ii_enh_tool TYPE REF TO if_enh_tool
+ RAISING zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_object_enhs.
+
+ METHODS:
+ deserialize
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
+ iv_package TYPE devclass
+ ii_enh_spot_tool TYPE REF TO if_enh_spot_tool
+ RAISING zcx_abapgit_exception,
+
+ serialize
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_output
+ ii_enh_spot_tool TYPE REF TO if_enh_spot_tool
+ RAISING zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_field_rules.
+
+ TYPES ty_fill_rule TYPE c LENGTH 2.
+
+ CONSTANTS:
+ BEGIN OF c_fill_rule,
+ date TYPE ty_fill_rule VALUE 'DT',
+ time TYPE ty_fill_rule VALUE 'TM',
+ timestamp TYPE ty_fill_rule VALUE 'TS',
+ user TYPE ty_fill_rule VALUE 'UR',
+ client TYPE ty_fill_rule VALUE 'CT',
+ package TYPE ty_fill_rule VALUE 'PK',
+ abap_language_version TYPE ty_fill_rule VALUE 'AL',
+ END OF c_fill_rule.
+
+ METHODS add
+ IMPORTING
+ iv_table TYPE tabname
+ iv_field TYPE fieldname
+ iv_fill_rule TYPE ty_fill_rule
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zif_abapgit_field_rules.
+
+ METHODS apply_clear_logic
+ IMPORTING
+ iv_table TYPE tabname
+ CHANGING
+ ct_data TYPE STANDARD TABLE.
+
+ METHODS apply_fill_logic
+ IMPORTING
+ iv_table TYPE tabname
+ iv_package TYPE devclass
+ iv_abap_language_version TYPE uccheck OPTIONAL
+ CHANGING
+ ct_data TYPE STANDARD TABLE.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_function_module.
+
+ METHODS:
+ function_exists
+ IMPORTING
+ iv_function_module_name TYPE clike
+ RETURNING
+ VALUE(rv_exists) TYPE abap_bool.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_lang_definitions.
+
+ TYPES:
+ BEGIN OF ty_tpool.
+ INCLUDE TYPE textpool.
+ TYPES: split TYPE c LENGTH 8,
+ END OF ty_tpool,
+ ty_tpool_tt TYPE STANDARD TABLE OF ty_tpool WITH DEFAULT KEY.
+
+ TYPES: BEGIN OF ty_i18n_tpool,
+ language TYPE langu,
+ textpool TYPE ty_tpool_tt,
+ END OF ty_i18n_tpool,
+ ty_i18n_tpools TYPE STANDARD TABLE OF ty_i18n_tpool.
+
+ TYPES: BEGIN OF ty_i18n_line,
+ language TYPE langu,
+ lines TYPE tlinetab,
+ END OF ty_i18n_line,
+ ty_i18n_lines TYPE STANDARD TABLE OF ty_i18n_line WITH KEY language.
+
+ TYPES: ty_langus TYPE STANDARD TABLE OF langu.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_lxe_texts .
+
+* type LXE_PCX_S1 inlined to be compatible with open-abap and ABAP Cloud
+ TYPES: BEGIN OF ty_text_pair,
+ textkey TYPE c LENGTH 32,
+ s_text TYPE c LENGTH 255,
+ t_text TYPE c LENGTH 255,
+ unitmlt TYPE i,
+ uppcase TYPE c LENGTH 4,
+ texttype TYPE c LENGTH 1,
+ END OF ty_text_pair.
+
+ TYPES ty_text_pairs TYPE STANDARD TABLE OF ty_text_pair WITH DEFAULT KEY.
+
+ METHODS serialize
+ IMPORTING
+ !iv_object_type TYPE tadir-object
+ !iv_object_name TYPE tadir-obj_name
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !io_files TYPE REF TO zcl_abapgit_objects_files
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize
+ IMPORTING
+ !iv_object_type TYPE tadir-object
+ !iv_object_name TYPE tadir-obj_name
+ !iv_package TYPE tadir-devclass
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ !io_files TYPE REF TO zcl_abapgit_objects_files
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_i18n_file.
+
+ TYPES ty_table_of TYPE STANDARD TABLE OF REF TO zif_abapgit_i18n_file WITH DEFAULT KEY.
+
+ METHODS render
+ RETURNING
+ VALUE(rv_data) TYPE xstring
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS translate
+ CHANGING
+ cv_changed TYPE abap_bool
+ ct_text_pairs TYPE zif_abapgit_lxe_texts=>ty_text_pairs
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS ext
+ RETURNING
+ VALUE(rv_ext) TYPE string.
+
+ METHODS lang
+ RETURNING
+ VALUE(rv_lang) TYPE laiso.
+
+ METHODS lang_suffix
+ RETURNING
+ VALUE(rv_lang_suffix) TYPE string.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_comparator .
+ TYPES:
+ BEGIN OF ty_result,
+ text TYPE string,
+ END OF ty_result .
+
+ METHODS compare
+ IMPORTING
+ !ii_local TYPE REF TO zif_abapgit_xml_input
+ !ii_remote TYPE REF TO zif_abapgit_xml_input
+ !ii_log TYPE REF TO zif_abapgit_log
+ RETURNING
+ VALUE(rs_result) TYPE ty_result
+ RAISING
+ zcx_abapgit_exception .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_persist_packages.
+
+ TYPES:
+ BEGIN OF ty_package,
+ devclass TYPE scompkdtln-devclass,
+ component TYPE scompkdtln-component,
+ comp_posid TYPE scompkdtln-comp_posid,
+ END OF ty_package,
+ ty_packages TYPE HASHED TABLE OF ty_package WITH UNIQUE KEY devclass.
+
+ METHODS modify
+ IMPORTING
+ !iv_package TYPE scompkdtln-devclass
+ !iv_component TYPE scompkdtln-component OPTIONAL
+ !iv_comp_posid TYPE scompkdtln-comp_posid OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS read
+ IMPORTING
+ !iv_package TYPE scompkdtln-devclass
+ RETURNING
+ VALUE(rs_package) TYPE ty_package.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_persist_settings.
+
+ METHODS modify
+ IMPORTING
+ !io_settings TYPE REF TO zcl_abapgit_settings
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read
+ RETURNING
+ VALUE(ro_settings) TYPE REF TO zcl_abapgit_settings .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_asset_manager .
+
+ TYPES:
+ BEGIN OF ty_web_asset,
+ url TYPE string,
+ type TYPE c LENGTH 50,
+ subtype TYPE c LENGTH 50,
+ content TYPE xstring,
+ is_cacheable TYPE abap_bool,
+ END OF ty_web_asset .
+ TYPES:
+ ty_web_assets TYPE STANDARD TABLE OF ty_web_asset WITH DEFAULT KEY .
+
+ METHODS get_all_assets
+ RETURNING
+ VALUE(rt_assets) TYPE ty_web_assets
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_asset
+ IMPORTING
+ iv_url TYPE string
+ RETURNING
+ VALUE(rs_asset) TYPE ty_web_asset
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_text_asset
+ IMPORTING
+ iv_url TYPE string
+ iv_assert_subtype TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_asset) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS register_asset
+ IMPORTING
+ !iv_url TYPE string
+ !iv_type TYPE string
+ !iv_cacheable TYPE abap_bool DEFAULT abap_true
+ !iv_mime_name TYPE wwwdatatab-objid OPTIONAL
+ !iv_base64 TYPE string OPTIONAL
+ !iv_inline TYPE string OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_error_handler .
+
+ METHODS handle_error
+ IMPORTING
+ ix_error TYPE REF TO zcx_abapgit_exception
+ RETURNING
+ VALUE(rv_handled) TYPE abap_bool.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_event_handler .
+
+ TYPES:
+ BEGIN OF ty_handling_result,
+ page TYPE REF TO zif_abapgit_gui_renderable,
+ state TYPE i,
+ END OF ty_handling_result.
+
+ METHODS on_event
+ IMPORTING
+ ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE ty_handling_result
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_hotkeys .
+
+ TYPES:
+ BEGIN OF ty_hotkey_with_descr,
+ ui_component TYPE string,
+ action TYPE string,
+ hotkey TYPE string,
+ description TYPE string,
+ END OF ty_hotkey_with_descr .
+ TYPES:
+ ty_hotkeys_with_descr TYPE STANDARD TABLE OF ty_hotkey_with_descr
+ WITH DEFAULT KEY
+ WITH UNIQUE SORTED KEY action COMPONENTS ui_component action .
+
+ METHODS get_hotkey_actions
+ RETURNING
+ VALUE(rt_hotkey_actions) TYPE ty_hotkeys_with_descr
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_hotkey_ctl.
+ METHODS register_hotkeys
+ IMPORTING
+ !it_hotkeys TYPE zif_abapgit_gui_hotkeys=>ty_hotkeys_with_descr.
+ METHODS reset.
+ METHODS get_registered_hotkeys
+ RETURNING
+ VALUE(rt_registered_hotkeys) TYPE zif_abapgit_gui_hotkeys=>ty_hotkeys_with_descr
+ RAISING
+ zcx_abapgit_exception.
+ METHODS set_visible
+ IMPORTING
+ iv_visible TYPE abap_bool.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_html_processor .
+
+ METHODS process
+ IMPORTING
+ !iv_html TYPE string
+ !ii_gui_services TYPE REF TO zif_abapgit_gui_services
+ RETURNING
+ VALUE(rv_html) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_modal .
+
+ METHODS is_modal
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_renderable .
+
+ METHODS render
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_services .
+ METHODS cache_asset
+ IMPORTING
+ !iv_text TYPE string OPTIONAL
+ !iv_xdata TYPE xstring OPTIONAL
+ !iv_url TYPE string OPTIONAL
+ !iv_type TYPE c
+ !iv_subtype TYPE c
+ RETURNING
+ VALUE(rv_url) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ " Notes:
+ " - page_asset is supposed to be not cacheable
+ " - add mime64 if needed (supposedly won't be needed)
+ METHODS register_page_asset
+ IMPORTING
+ !iv_url TYPE string
+ !iv_type TYPE string
+ !iv_mime_name TYPE wwwdatatab-objid OPTIONAL
+ !iv_inline TYPE string OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS register_event_handler
+ IMPORTING
+ !ii_event_handler TYPE REF TO zif_abapgit_gui_event_handler .
+ METHODS get_current_page_name
+ RETURNING
+ VALUE(rv_page_name) TYPE string .
+ METHODS get_hotkeys_ctl
+ RETURNING
+ VALUE(ri_hotkey_ctl) TYPE REF TO zif_abapgit_gui_hotkey_ctl .
+ METHODS get_html_parts
+ RETURNING
+ VALUE(ro_parts) TYPE REF TO zcl_abapgit_html_parts .
+ METHODS get_log
+ IMPORTING
+ !iv_create_new TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_log) TYPE REF TO zif_abapgit_log .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_html.
+
+ TYPES:
+ BEGIN OF ty_data_attr,
+ name TYPE string,
+ value TYPE string,
+ END OF ty_data_attr,
+ ty_data_attrs TYPE STANDARD TABLE OF ty_data_attr WITH KEY name.
+
+ CONSTANTS:
+ BEGIN OF c_action_type,
+ sapevent TYPE c VALUE 'E',
+ url TYPE c VALUE 'U',
+ onclick TYPE c VALUE 'C',
+ separator TYPE c VALUE 'S',
+ dummy TYPE c VALUE '_',
+ END OF c_action_type .
+ CONSTANTS:
+ BEGIN OF c_html_opt,
+ strong TYPE c VALUE 'E',
+ cancel TYPE c VALUE 'C',
+ crossout TYPE c VALUE 'X',
+ END OF c_html_opt .
+
+ TYPES:
+ ty_table_of TYPE STANDARD TABLE OF REF TO zif_abapgit_html WITH DEFAULT KEY.
+
+ DATA mv_chunk_title TYPE string READ-ONLY. " Primarily for debug of postponed html parts
+
+ METHODS set_title
+ IMPORTING
+ iv_title TYPE string
+ RETURNING
+ VALUE(ri_self) TYPE REF TO zif_abapgit_html.
+
+ METHODS add
+ IMPORTING
+ !ig_chunk TYPE any
+ RETURNING
+ VALUE(ri_self) TYPE REF TO zif_abapgit_html.
+
+ METHODS render
+ IMPORTING
+ !iv_no_indent_jscss TYPE abap_bool DEFAULT abap_false
+ !iv_no_line_breaks TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rv_html) TYPE string .
+
+ METHODS is_empty
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+
+ METHODS add_a
+ IMPORTING
+ !iv_txt TYPE string
+ !iv_act TYPE string
+ !iv_query TYPE string OPTIONAL
+ !iv_typ TYPE c DEFAULT c_action_type-sapevent
+ !iv_opt TYPE clike OPTIONAL
+ !iv_class TYPE string OPTIONAL
+ !iv_id TYPE string OPTIONAL
+ !iv_style TYPE string OPTIONAL
+ !iv_title TYPE string OPTIONAL
+ RETURNING
+ VALUE(ri_self) TYPE REF TO zif_abapgit_html.
+
+ METHODS add_checkbox
+ IMPORTING
+ iv_id TYPE string
+ iv_checked TYPE abap_bool OPTIONAL
+ RETURNING
+ VALUE(ri_self) TYPE REF TO zif_abapgit_html.
+
+ METHODS a
+ IMPORTING
+ !iv_txt TYPE string
+ !iv_act TYPE string
+ !iv_query TYPE string OPTIONAL
+ !iv_typ TYPE c DEFAULT zif_abapgit_html=>c_action_type-sapevent
+ !iv_opt TYPE clike OPTIONAL
+ !iv_class TYPE string OPTIONAL
+ !iv_id TYPE string OPTIONAL
+ !iv_style TYPE string OPTIONAL
+ !iv_title TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_str) TYPE string .
+
+ METHODS icon
+ IMPORTING
+ !iv_name TYPE string
+ !iv_hint TYPE string OPTIONAL
+ !iv_class TYPE string OPTIONAL
+ !iv_onclick TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_str) TYPE string .
+
+ METHODS add_icon
+ IMPORTING
+ !iv_name TYPE string
+ !iv_hint TYPE string OPTIONAL
+ !iv_class TYPE string OPTIONAL
+ !iv_onclick TYPE string OPTIONAL
+ RETURNING
+ VALUE(ri_self) TYPE REF TO zif_abapgit_html.
+
+ METHODS wrap
+ IMPORTING
+ !iv_tag TYPE string
+ !iv_content TYPE string OPTIONAL
+ !ii_content TYPE REF TO zif_abapgit_html OPTIONAL
+ !iv_id TYPE string OPTIONAL
+ !iv_class TYPE string OPTIONAL
+ !iv_hint TYPE string OPTIONAL
+ !iv_style TYPE string OPTIONAL
+ !iv_format_single_line TYPE abap_bool DEFAULT abap_false
+ !is_data_attr TYPE ty_data_attr OPTIONAL
+ !it_data_attrs TYPE ty_data_attrs OPTIONAL
+ RETURNING
+ VALUE(ri_self) TYPE REF TO zif_abapgit_html.
+
+ METHODS td
+ IMPORTING
+ !iv_content TYPE string OPTIONAL
+ !ii_content TYPE REF TO zif_abapgit_html OPTIONAL
+ !iv_id TYPE string OPTIONAL
+ !iv_class TYPE string OPTIONAL
+ !iv_hint TYPE string OPTIONAL
+ !iv_style TYPE string OPTIONAL
+ !iv_format_single_line TYPE abap_bool DEFAULT abap_true
+ !is_data_attr TYPE ty_data_attr OPTIONAL
+ !it_data_attrs TYPE ty_data_attrs OPTIONAL
+ PREFERRED PARAMETER iv_content
+ RETURNING
+ VALUE(ri_self) TYPE REF TO zif_abapgit_html.
+
+ METHODS th
+ IMPORTING
+ !iv_content TYPE string OPTIONAL
+ !ii_content TYPE REF TO zif_abapgit_html OPTIONAL
+ !iv_id TYPE string OPTIONAL
+ !iv_class TYPE string OPTIONAL
+ !iv_hint TYPE string OPTIONAL
+ !iv_style TYPE string OPTIONAL
+ !iv_format_single_line TYPE abap_bool DEFAULT abap_true
+ !is_data_attr TYPE ty_data_attr OPTIONAL
+ !it_data_attrs TYPE ty_data_attrs OPTIONAL
+ PREFERRED PARAMETER iv_content
+ RETURNING
+ VALUE(ri_self) TYPE REF TO zif_abapgit_html.
+
+ METHODS div
+ IMPORTING
+ !iv_content TYPE string OPTIONAL
+ !ii_content TYPE REF TO zif_abapgit_html OPTIONAL
+ !iv_id TYPE string OPTIONAL
+ !iv_class TYPE string OPTIONAL
+ !iv_style TYPE string OPTIONAL
+ !is_data_attr TYPE ty_data_attr OPTIONAL
+ !it_data_attrs TYPE ty_data_attrs OPTIONAL
+ PREFERRED PARAMETER iv_content
+ RETURNING
+ VALUE(ri_self) TYPE REF TO zif_abapgit_html.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_html_viewer .
+ TYPES:
+ ty_char256 TYPE c LENGTH 256 .
+ TYPES:
+ ty_post_data TYPE STANDARD TABLE OF ty_char256 WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_name_value,
+ name TYPE c LENGTH 30,
+ value TYPE c LENGTH 250,
+ END OF ty_name_value .
+ TYPES:
+ ty_query_table TYPE STANDARD TABLE OF ty_name_value WITH DEFAULT KEY .
+
+ CONSTANTS c_id_sapevent TYPE i VALUE 1 ##NO_TEXT.
+
+ EVENTS sapevent
+ EXPORTING
+ VALUE(action) TYPE c OPTIONAL
+ VALUE(frame) TYPE c OPTIONAL
+ VALUE(getdata) TYPE c OPTIONAL
+ VALUE(postdata) TYPE ty_post_data OPTIONAL
+ VALUE(query_table) TYPE ty_query_table OPTIONAL .
+
+ METHODS load_data
+ IMPORTING
+ !iv_url TYPE string OPTIONAL
+ !iv_type TYPE c DEFAULT 'text'
+ !iv_subtype TYPE c DEFAULT 'html'
+ !iv_size TYPE i DEFAULT 0
+ EXPORTING
+ !ev_assigned_url TYPE string
+ CHANGING
+ !ct_data_table TYPE STANDARD TABLE
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_registered_events
+ IMPORTING
+ !it_events TYPE cntl_simple_events
+ RAISING
+ zcx_abapgit_exception .
+ METHODS show_url
+ IMPORTING
+ !iv_url TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS free .
+ METHODS close_document .
+ METHODS get_url
+ RETURNING
+ VALUE(rv_url) TYPE string .
+ METHODS back .
+ METHODS set_visiblity
+ IMPORTING
+ !iv_visible TYPE abap_bool .
+ METHODS set_focus RAISING zcx_abapgit_exception.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_event .
+
+ DATA mv_action TYPE string READ-ONLY.
+ DATA mv_getdata TYPE string READ-ONLY.
+ DATA mt_postdata TYPE zif_abapgit_html_viewer=>ty_post_data READ-ONLY.
+ DATA mi_gui_services TYPE REF TO zif_abapgit_gui_services READ-ONLY.
+ DATA mv_current_page_name TYPE string.
+
+ METHODS query
+ RETURNING
+ VALUE(ro_string_map) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS form_data
+ RETURNING
+ VALUE(ro_string_map) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_menu_provider .
+
+ METHODS get_menu
+ RETURNING
+ VALUE(ro_toolbar) TYPE REF TO zcl_abapgit_html_toolbar
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_page_title .
+
+ METHODS get_page_title
+ RETURNING
+ VALUE(rv_title) TYPE string.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_render_item .
+
+ METHODS render
+ IMPORTING
+ iv_item TYPE any
+ iv_index TYPE i
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_html_form .
+
+ TYPES:
+ BEGIN OF ty_subitem,
+ label TYPE string,
+ value TYPE string,
+ readonly TYPE abap_bool,
+ END OF ty_subitem .
+ TYPES:
+ ty_subitems TYPE STANDARD TABLE OF ty_subitem WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_field,
+ type TYPE i,
+ name TYPE string,
+ label TYPE string,
+ hint TYPE string,
+ dblclick TYPE string,
+ click TYPE string,
+ placeholder TYPE string,
+ required TYPE string,
+ upper_case TYPE abap_bool,
+ item_class TYPE string,
+ error TYPE string,
+ default_value TYPE string,
+ side_action TYPE string,
+ subitems TYPE ty_subitems,
+ readonly TYPE abap_bool,
+ password TYPE abap_bool,
+ condense TYPE abap_bool,
+ min TYPE i,
+ max TYPE i,
+ rows TYPE i,
+ cols TYPE i,
+ END OF ty_field .
+ TYPES:
+ ty_fields TYPE STANDARD TABLE OF ty_field
+ WITH DEFAULT KEY
+ WITH UNIQUE SORTED KEY by_name COMPONENTS name .
+ TYPES:
+ BEGIN OF ty_command,
+ label TYPE string,
+ action TYPE string,
+ cmd_type TYPE i,
+ END OF ty_command .
+
+ CONSTANTS c_rows TYPE string VALUE 'rows'.
+ CONSTANTS:
+ BEGIN OF c_cmd_type,
+ input TYPE i VALUE 1,
+ input_main TYPE i VALUE 2,
+ link TYPE i VALUE 3,
+ button TYPE i VALUE 4,
+ END OF c_cmd_type .
+ CONSTANTS:
+ BEGIN OF c_field_type,
+ text TYPE i VALUE 1,
+ radio TYPE i VALUE 2,
+ checkbox TYPE i VALUE 3,
+ field_group TYPE i VALUE 4,
+ number TYPE i VALUE 5,
+ textarea TYPE i VALUE 6,
+ table TYPE i VALUE 7,
+ hidden TYPE i VALUE 8,
+ END OF c_field_type .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_html_popup .
+
+ METHODS create_picklist
+ RETURNING
+ VALUE(ro_picklist) TYPE REF TO zcl_abapgit_gui_picklist
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_html_table .
+
+ TYPES:
+ BEGIN OF ty_row_attrs,
+ css_class TYPE string,
+ data TYPE zif_abapgit_html=>ty_data_attr,
+ END OF ty_row_attrs.
+
+ TYPES:
+ BEGIN OF ty_cell_render,
+ css_class TYPE string,
+ content TYPE string,
+ html TYPE REF TO zif_abapgit_html,
+ END OF ty_cell_render.
+
+ TYPES:
+ BEGIN OF ty_sorting_state,
+ column_id TYPE string,
+ descending TYPE abap_bool,
+ END OF ty_sorting_state.
+
+ METHODS get_row_attrs
+ IMPORTING
+ iv_table_id TYPE string
+ iv_row_index TYPE i
+ is_row TYPE any
+ RETURNING
+ VALUE(rs_attrs) TYPE ty_row_attrs
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_cell
+ IMPORTING
+ iv_table_id TYPE string
+ iv_row_index TYPE i
+ is_row TYPE any
+ iv_column_id TYPE string
+ iv_value TYPE any
+ RETURNING
+ VALUE(rs_render) TYPE ty_cell_render
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_diff.
+
+ TYPES:
+ BEGIN OF ty_file_diff,
+ path TYPE string,
+ filename TYPE string,
+ obj_type TYPE string,
+ obj_name TYPE string,
+ lstate TYPE c LENGTH 1,
+ rstate TYPE c LENGTH 1,
+ fstate TYPE c LENGTH 1, " FILE state - Abstraction for shorter ifs
+ o_diff TYPE REF TO zif_abapgit_diff,
+ changed_by TYPE syuname,
+ type TYPE string,
+ END OF ty_file_diff.
+ TYPES:
+ ty_file_diffs TYPE STANDARD TABLE OF ty_file_diff
+ WITH NON-UNIQUE DEFAULT KEY
+ WITH NON-UNIQUE SORTED KEY secondary
+ COMPONENTS path filename.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_progress .
+ METHODS show
+ IMPORTING
+ !iv_current TYPE i
+ !iv_text TYPE csequence .
+ METHODS set_total
+ IMPORTING
+ !iv_total TYPE i .
+ METHODS off .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_services_repo .
+
+ TYPES:
+ BEGIN OF ty_repo_params,
+ name TYPE string,
+ url TYPE string,
+ package TYPE devclass,
+ branch_name TYPE string,
+ display_name TYPE string,
+ folder_logic TYPE string,
+ labels TYPE string,
+ ignore_subpackages TYPE abap_bool,
+ main_lang_only TYPE abap_bool,
+ abap_lang_vers TYPE string,
+ END OF ty_repo_params .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_frontend_services.
+
+ TYPES:
+ ty_char1 TYPE c LENGTH 1,
+ ty_gui_release TYPE n LENGTH 4,
+ ty_gui_sp TYPE n LENGTH 2,
+ ty_gui_patch TYPE n LENGTH 2.
+
+ METHODS file_upload
+ IMPORTING
+ !iv_path TYPE string
+ RETURNING
+ VALUE(rv_xstr) TYPE xstring
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS file_download
+ IMPORTING
+ !iv_path TYPE string
+ !iv_xstr TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS show_file_save_dialog
+ IMPORTING
+ !iv_title TYPE string
+ !iv_extension TYPE string
+ !iv_default_filename TYPE string
+ RETURNING
+ VALUE(rv_path) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS show_file_open_dialog
+ IMPORTING
+ !iv_title TYPE string
+ !iv_extension TYPE string
+ !iv_default_filename TYPE string
+ RETURNING
+ VALUE(rv_path) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS clipboard_export
+ IMPORTING
+ iv_no_auth_check TYPE abap_bool DEFAULT abap_false
+ VALUE(it_data) TYPE STANDARD TABLE
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS execute
+ IMPORTING
+ !iv_document TYPE string OPTIONAL
+ !iv_application TYPE string OPTIONAL
+ !iv_parameter TYPE string OPTIONAL
+ !iv_default_directory TYPE string OPTIONAL
+ !iv_maximized TYPE string OPTIONAL
+ !iv_minimized TYPE string OPTIONAL
+ !iv_synchronous TYPE string OPTIONAL
+ !iv_operation TYPE string DEFAULT 'OPEN'
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_system_directory
+ CHANGING
+ !cv_system_directory TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS directory_browse
+ IMPORTING
+ iv_window_title TYPE string OPTIONAL
+ iv_initial_folder TYPE string OPTIONAL
+ CHANGING
+ cv_selected_folder TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_file_separator
+ CHANGING
+ cv_file_separator TYPE ty_char1
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_gui_version
+ EXPORTING
+ ev_gui_release TYPE ty_gui_release
+ ev_gui_sp TYPE ty_gui_sp
+ ev_gui_patch TYPE ty_gui_patch
+ ev_gui_version_string TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS directory_exist
+ IMPORTING
+ iv_directory TYPE string
+ RETURNING
+ VALUE(rv_exists) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS directory_create
+ IMPORTING
+ iv_directory TYPE string
+ CHANGING
+ cv_rc TYPE i
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS gui_is_available
+ RETURNING
+ VALUE(rv_gui_is_available) TYPE abap_bool.
+
+ METHODS is_sapgui_for_java
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+
+ METHODS is_sapgui_for_windows
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+
+ METHODS is_webgui
+ RETURNING
+ VALUE(rv_is_webgui) TYPE abap_bool.
+
+ METHODS open_ie_devtools
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_definitions .
+
+ TYPES:
+ ty_string_tt TYPE STANDARD TABLE OF string WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_item_signature,
+ obj_type TYPE tadir-object,
+ obj_name TYPE tadir-obj_name,
+ devclass TYPE devclass,
+ END OF ty_item_signature .
+ TYPES:
+ BEGIN OF ty_obj_namespace,
+ namespace TYPE trnspace-namespace,
+ obj_without_namespace TYPE tadir-obj_name,
+ END OF ty_obj_namespace.
+ TYPES:
+ BEGIN OF ty_item.
+ INCLUDE TYPE ty_item_signature.
+ TYPES:
+ srcsystem TYPE tadir-srcsystem,
+ origlang TYPE tadir-masterlang,
+ inactive TYPE abap_bool,
+ abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version,
+ END OF ty_item .
+ TYPES:
+ ty_items_tt TYPE STANDARD TABLE OF ty_item WITH DEFAULT KEY .
+ TYPES:
+ ty_items_ts TYPE SORTED TABLE OF ty_item WITH UNIQUE KEY obj_type obj_name .
+ TYPES:
+ BEGIN OF ty_file_item,
+ file TYPE zif_abapgit_git_definitions=>ty_file,
+ item TYPE ty_item,
+ END OF ty_file_item .
+ TYPES:
+ ty_files_item_tt TYPE STANDARD TABLE OF ty_file_item WITH DEFAULT KEY .
+ TYPES:
+ ty_files_item_by_file_tt TYPE SORTED TABLE OF ty_file_item WITH UNIQUE KEY file-path file-filename.
+ TYPES:
+ ty_yes_no TYPE c LENGTH 1,
+ ty_yes_no_partial TYPE c LENGTH 1.
+ TYPES:
+ BEGIN OF ty_overwrite.
+ INCLUDE TYPE ty_item.
+ TYPES:
+ state TYPE c LENGTH 2,
+ action TYPE i,
+ icon TYPE icon_d,
+ text TYPE string,
+ decision TYPE ty_yes_no,
+ END OF ty_overwrite .
+ TYPES:
+ ty_overwrite_tt TYPE STANDARD TABLE OF ty_overwrite WITH DEFAULT KEY
+ WITH UNIQUE HASHED KEY object_type_and_name
+ COMPONENTS obj_type obj_name .
+ TYPES:
+ BEGIN OF ty_requirements,
+ met TYPE ty_yes_no,
+ decision TYPE ty_yes_no,
+ END OF ty_requirements .
+ TYPES:
+ BEGIN OF ty_dependencies,
+ met TYPE ty_yes_no,
+ decision TYPE ty_yes_no,
+ END OF ty_dependencies .
+ TYPES:
+ BEGIN OF ty_transport_type,
+ request TYPE trfunction,
+ task TYPE trfunction,
+ END OF ty_transport_type .
+ TYPES:
+ BEGIN OF ty_transport,
+ required TYPE abap_bool,
+ transport TYPE trkorr,
+ type TYPE ty_transport_type,
+ END OF ty_transport .
+ TYPES:
+ BEGIN OF ty_deserialize_checks,
+ overwrite TYPE ty_overwrite_tt,
+ warning_package TYPE ty_overwrite_tt,
+ data_loss TYPE ty_overwrite_tt,
+ requirements TYPE ty_requirements,
+ dependencies TYPE ty_dependencies,
+ transport TYPE ty_transport,
+ customizing TYPE ty_transport,
+ END OF ty_deserialize_checks .
+ TYPES:
+ BEGIN OF ty_delete_checks,
+ transport TYPE ty_transport,
+ END OF ty_delete_checks .
+ TYPES:
+ BEGIN OF ty_metadata,
+ class TYPE string,
+ version TYPE string,
+ END OF ty_metadata .
+ TYPES:
+ BEGIN OF ty_repo_file,
+ path TYPE string,
+ filename TYPE string,
+ is_changed TYPE abap_bool,
+ rstate TYPE zif_abapgit_git_definitions=>ty_item_state,
+ lstate TYPE zif_abapgit_git_definitions=>ty_item_state,
+ END OF ty_repo_file .
+ TYPES:
+ ty_repo_file_tt TYPE STANDARD TABLE OF ty_repo_file WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_object,
+ sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ type TYPE zif_abapgit_git_definitions=>ty_type,
+ data TYPE xstring,
+ adler32 TYPE zif_abapgit_git_definitions=>ty_adler32,
+ index TYPE i,
+ END OF ty_object .
+ TYPES:
+ ty_objects_tt TYPE STANDARD TABLE OF ty_object WITH DEFAULT KEY
+ WITH NON-UNIQUE SORTED KEY sha COMPONENTS sha1
+ WITH NON-UNIQUE SORTED KEY type COMPONENTS type sha1 .
+ TYPES:
+ BEGIN OF ty_tadir,
+ pgmid TYPE tadir-pgmid,
+ object TYPE tadir-object,
+ obj_name TYPE tadir-obj_name,
+ devclass TYPE tadir-devclass,
+ korrnum TYPE tadir-korrnum, " used by ZCL_ABAPGIT_DEPENDENCIES->RESOLVE
+ delflag TYPE tadir-delflag,
+ genflag TYPE tadir-genflag,
+ path TYPE string,
+ srcsystem TYPE tadir-srcsystem,
+ masterlang TYPE tadir-masterlang,
+ END OF ty_tadir .
+ TYPES:
+ ty_tadir_tt TYPE STANDARD TABLE OF ty_tadir WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_result,
+ obj_type TYPE tadir-object,
+ obj_name TYPE tadir-obj_name,
+ inactive TYPE abap_bool,
+ path TYPE string,
+ filename TYPE string,
+ package TYPE devclass,
+ match TYPE abap_bool,
+ lstate TYPE zif_abapgit_git_definitions=>ty_item_state,
+ rstate TYPE zif_abapgit_git_definitions=>ty_item_state,
+ packmove TYPE abap_bool,
+ srcsystem TYPE tadir-srcsystem,
+ origlang TYPE tadir-masterlang,
+ END OF ty_result .
+ TYPES:
+ ty_results_tt TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY
+ WITH NON-UNIQUE SORTED KEY sec_key
+ COMPONENTS obj_type obj_name.
+ TYPES:
+ ty_results_ts_path TYPE HASHED TABLE OF ty_result WITH UNIQUE KEY path filename .
+ TYPES:
+ BEGIN OF ty_stage_files,
+ local TYPE ty_files_item_tt,
+ remote TYPE zif_abapgit_git_definitions=>ty_files_tt,
+ status TYPE ty_results_ts_path,
+ END OF ty_stage_files .
+
+ TYPES:
+ BEGIN OF ty_transport_to_branch,
+ branch_name TYPE string,
+ commit_text TYPE string,
+ END OF ty_transport_to_branch .
+
+ TYPES:
+ BEGIN OF ty_diff,
+ patch_flag TYPE abap_bool,
+ new_num TYPE c LENGTH 6,
+ new TYPE string,
+ result TYPE c LENGTH 1,
+ old_num TYPE c LENGTH 6,
+ old TYPE string,
+ short TYPE abap_bool,
+ beacon TYPE i,
+ END OF ty_diff .
+ TYPES:
+ ty_diffs_tt TYPE STANDARD TABLE OF ty_diff
+ WITH DEFAULT KEY
+ WITH NON-UNIQUE SORTED KEY new_num COMPONENTS new_num
+ WITH NON-UNIQUE SORTED KEY old_num COMPONENTS old_num.
+ TYPES:
+ BEGIN OF ty_count,
+ insert TYPE i,
+ delete TYPE i,
+ update TYPE i,
+ END OF ty_count .
+ TYPES:
+ BEGIN OF ty_ancestor,
+ commit TYPE zif_abapgit_git_definitions=>ty_sha1,
+ tree TYPE zif_abapgit_git_definitions=>ty_sha1,
+ time TYPE string,
+ body TYPE string,
+ END OF ty_ancestor .
+ TYPES:
+ BEGIN OF ty_repo_item,
+ obj_type TYPE tadir-object,
+ obj_name TYPE tadir-obj_name,
+ inactive TYPE abap_bool,
+ sortkey TYPE i,
+ path TYPE string,
+ is_dir TYPE abap_bool,
+ changes TYPE i,
+ lstate TYPE zif_abapgit_git_definitions=>ty_item_state,
+ rstate TYPE zif_abapgit_git_definitions=>ty_item_state,
+ files TYPE ty_repo_file_tt,
+ changed_by TYPE syuname,
+ transport TYPE trkorr,
+ packmove TYPE abap_bool,
+ srcsystem TYPE tadir-srcsystem,
+ origlang TYPE tadir-masterlang,
+ END OF ty_repo_item .
+ TYPES:
+ ty_repo_item_tt TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY .
+
+ TYPES:
+ ty_dokil_tt TYPE STANDARD TABLE OF dokil
+ WITH NON-UNIQUE DEFAULT KEY .
+ TYPES:
+ ty_proxy_bypass_url TYPE c LENGTH 255,
+ ty_range_proxy_bypass_url TYPE RANGE OF ty_proxy_bypass_url.
+ TYPES:
+ BEGIN OF ty_version,
+ major TYPE i,
+ minor TYPE i,
+ patch TYPE i,
+ prerelase TYPE string,
+ prerelase_patch TYPE i,
+ END OF ty_version.
+ TYPES ty_sci_result TYPE c LENGTH 1.
+ CONSTANTS:
+ BEGIN OF c_sci_result,
+ no_run TYPE ty_sci_result VALUE '',
+ failed TYPE ty_sci_result VALUE 'F',
+ warning TYPE ty_sci_result VALUE 'W',
+ passed TYPE ty_sci_result VALUE 'P',
+ END OF c_sci_result.
+ CONSTANTS:
+ BEGIN OF c_diff,
+ unchanged TYPE c LENGTH 1 VALUE ' ',
+ insert TYPE c LENGTH 1 VALUE 'I',
+ delete TYPE c LENGTH 1 VALUE 'D',
+ update TYPE c LENGTH 1 VALUE 'U',
+ END OF c_diff .
+ CONSTANTS:
+ BEGIN OF c_state, " https://git-scm.com/docs/git-status
+ unchanged TYPE zif_abapgit_git_definitions=>ty_item_state VALUE '',
+ added TYPE zif_abapgit_git_definitions=>ty_item_state VALUE 'A',
+ modified TYPE zif_abapgit_git_definitions=>ty_item_state VALUE 'M',
+ deleted TYPE zif_abapgit_git_definitions=>ty_item_state VALUE 'D',
+ mixed TYPE zif_abapgit_git_definitions=>ty_item_state VALUE '*',
+ END OF c_state .
+ CONSTANTS c_english TYPE spras VALUE 'E' ##NO_TEXT.
+ CONSTANTS c_root_dir TYPE string VALUE '/' ##NO_TEXT.
+ CONSTANTS c_dot_abapgit TYPE string VALUE '.abapgit.xml' ##NO_TEXT.
+ CONSTANTS c_author_regex TYPE string VALUE '^(.+) <(.*)> (\d{10})\s?.\d{4}$' ##NO_TEXT.
+ CONSTANTS:
+ BEGIN OF c_action,
+ abapgit_home TYPE string VALUE 'abapgit_home',
+ bg_update TYPE string VALUE 'bg_update',
+ change_order_by TYPE string VALUE 'change_order_by',
+ changelog TYPE string VALUE 'changelog',
+ clipboard TYPE string VALUE 'clipboard',
+ db_display TYPE string VALUE 'db_display',
+ db_edit TYPE string VALUE 'db_edit',
+ direction TYPE string VALUE 'direction',
+ documentation TYPE string VALUE 'documentation',
+ flow TYPE string VALUE 'flow',
+ git_branch_create TYPE string VALUE 'git_branch_create',
+ git_branch_delete TYPE string VALUE 'git_branch_delete',
+ git_branch_merge TYPE string VALUE 'git_branch_merge',
+ git_branch_switch TYPE string VALUE 'git_branch_switch',
+ git_commit TYPE string VALUE 'git_commit',
+ git_pull TYPE string VALUE 'git_pull',
+ git_tag_create TYPE string VALUE 'git_tag_create',
+ git_tag_delete TYPE string VALUE 'git_tag_delete',
+ git_tag_switch TYPE string VALUE 'git_tag_switch',
+ go_back TYPE string VALUE 'go_back',
+ go_background TYPE string VALUE 'go_background',
+ go_background_run TYPE string VALUE 'go_background_run',
+ go_commit TYPE string VALUE 'go_commit',
+ go_db TYPE string VALUE 'go_db',
+ go_debuginfo TYPE string VALUE 'go_debuginfo',
+ go_explore TYPE string VALUE 'go_explore',
+ go_file_diff TYPE string VALUE 'go_file_diff',
+ go_home TYPE string VALUE 'go_home',
+ go_patch TYPE string VALUE 'go_patch',
+ go_repo TYPE string VALUE 'go_repo',
+ go_repo_diff TYPE string VALUE 'go_repo_diff',
+ go_settings TYPE string VALUE 'go_settings',
+ go_settings_personal TYPE string VALUE 'go_settings_personal',
+ go_stage TYPE string VALUE 'go_stage',
+ go_stage_transport TYPE string VALUE 'go_stage_transport',
+ go_tutorial TYPE string VALUE 'go_tutorial',
+ goto_message TYPE string VALUE 'goto_message',
+ goto_source TYPE string VALUE 'goto_source',
+ homepage TYPE string VALUE 'homepage',
+ ie_devtools TYPE string VALUE 'ie_devtools',
+ jump TYPE string VALUE 'jump',
+ jump_transaction TYPE string VALUE 'jump_transaction',
+ jump_transport TYPE string VALUE 'jump_transport',
+ jump_user TYPE string VALUE 'jump_user',
+ performance_test TYPE string VALUE 'performance_test',
+ repo_activate_objects TYPE string VALUE 'repo_activate_objects',
+ repo_add_all_obj_to_trans_req TYPE string VALUE 'repo_add_all_obj_to_trans_req',
+ repo_background TYPE string VALUE 'repo_background',
+ repo_change_package TYPE string VALUE 'repo_change_package',
+ repo_code_inspector TYPE string VALUE 'repo_code_inspector',
+ repo_delete_objects TYPE string VALUE 'repo_delete_objects',
+ repo_infos TYPE string VALUE 'repo_infos',
+ repo_local_settings TYPE string VALUE 'repo_local_settings',
+ repo_log TYPE string VALUE 'repo_log',
+ repo_newoffline TYPE string VALUE 'repo_newoffline',
+ repo_newonline TYPE string VALUE 'repo_newonline',
+ repo_open_in_master_lang TYPE string VALUE 'repo_open_in_master_lang',
+ repo_purge TYPE string VALUE 'repo_purge',
+ repo_refresh TYPE string VALUE 'repo_refresh',
+ repo_refresh_checksums TYPE string VALUE 'repo_refresh_checksums',
+ repo_remote_settings TYPE string VALUE 'repo_remote_settings',
+ repo_remove TYPE string VALUE 'repo_remove',
+ repo_settings TYPE string VALUE 'repo_settings',
+ repo_syntax_check TYPE string VALUE 'repo_syntax_check',
+ repo_toggle_fav TYPE string VALUE 'repo_toggle_fav',
+ repo_transport_to_branch TYPE string VALUE 'repo_transport_to_branch',
+ rfc_compare TYPE string VALUE 'rfc_compare',
+ show_callstack TYPE string VALUE 'show_callstack',
+ show_hotkeys TYPE string VALUE 'show_hotkeys',
+ sponsor TYPE string VALUE 'sponsor',
+ toggle_favorites TYPE string VALUE 'toggle_favorites',
+ url TYPE string VALUE 'url',
+ where_used TYPE string VALUE 'where_used',
+ zip_export TYPE string VALUE 'zip_export',
+ zip_export_transport TYPE string VALUE 'zip_export_transport',
+ zip_import TYPE string VALUE 'zip_import',
+ zip_object TYPE string VALUE 'zip_object',
+ zip_package TYPE string VALUE 'zip_package',
+ zip_transport TYPE string VALUE 'zip_transport',
+ END OF c_action.
+ CONSTANTS c_spagpa_param_repo_key TYPE c LENGTH 20 VALUE 'REPO_KEY' ##NO_TEXT.
+ CONSTANTS c_spagpa_param_package TYPE c LENGTH 20 VALUE 'PACKAGE' ##NO_TEXT.
+ CONSTANTS c_yes TYPE ty_yes_no VALUE 'Y'.
+ CONSTANTS c_no TYPE ty_yes_no VALUE 'N'.
+ CONSTANTS c_partial TYPE ty_yes_no_partial VALUE 'P'.
+
+ TYPES:
+ ty_method TYPE c LENGTH 1 .
+ TYPES:
+ BEGIN OF ty_stage,
+ file TYPE zif_abapgit_git_definitions=>ty_file,
+ method TYPE ty_method,
+ status TYPE ty_result,
+ END OF ty_stage .
+ TYPES:
+ ty_stage_tt TYPE SORTED TABLE OF ty_stage
+ WITH UNIQUE KEY file-path file-filename .
+
+ CONSTANTS:
+ BEGIN OF c_method,
+ add TYPE ty_method VALUE 'A',
+ rm TYPE ty_method VALUE 'R',
+ ignore TYPE ty_method VALUE 'I',
+ skip TYPE ty_method VALUE '?',
+ END OF c_method .
+
+ TYPES:
+ ty_sap_langu_tab TYPE STANDARD TABLE OF langu WITH DEFAULT KEY.
+ TYPES:
+ ty_languages TYPE STANDARD TABLE OF laiso WITH DEFAULT KEY.
+ TYPES:
+ BEGIN OF ty_i18n_params,
+ main_language TYPE sy-langu,
+ main_language_only TYPE abap_bool,
+ translation_languages TYPE ty_languages,
+ use_lxe TYPE abap_bool,
+ suppress_po_comments TYPE abap_bool,
+ END OF ty_i18n_params .
+ TYPES ty_trrngtrkor_tt TYPE RANGE OF trkorr.
+
+ CONSTANTS c_multiple_transports TYPE trkorr VALUE 'MULTIPLE'.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_apack_definitions .
+ TYPES:
+ BEGIN OF ty_dependency,
+ group_id TYPE string,
+ artifact_id TYPE string,
+ version TYPE string,
+ sem_version TYPE zif_abapgit_definitions=>ty_version,
+ git_url TYPE string,
+ target_package TYPE devclass,
+ END OF ty_dependency,
+ ty_dependencies TYPE STANDARD TABLE OF ty_dependency
+ WITH NON-UNIQUE DEFAULT KEY,
+
+ ty_repository_type TYPE string,
+
+ BEGIN OF ty_descriptor_wo_dependencies,
+ group_id TYPE string,
+ artifact_id TYPE string,
+ version TYPE string,
+ sem_version TYPE zif_abapgit_definitions=>ty_version,
+ repository_type TYPE ty_repository_type,
+ git_url TYPE string,
+ END OF ty_descriptor_wo_dependencies,
+
+ BEGIN OF ty_descriptor.
+ INCLUDE TYPE ty_descriptor_wo_dependencies.
+ TYPES:
+ dependencies TYPE ty_dependencies,
+ END OF ty_descriptor,
+
+ ty_descriptors TYPE STANDARD TABLE OF ty_descriptor WITH NON-UNIQUE DEFAULT KEY.
+
+ TYPES:
+ BEGIN OF ty_manifest_declaration,
+ clsname TYPE seoclsname,
+ devclass TYPE devclass,
+ END OF ty_manifest_declaration,
+ ty_manifest_declarations TYPE STANDARD TABLE OF ty_manifest_declaration WITH DEFAULT KEY.
+
+ CONSTANTS c_dot_apack_manifest TYPE string VALUE '.apack-manifest.xml' ##NO_TEXT.
+ CONSTANTS c_repository_type_abapgit TYPE ty_repository_type VALUE 'abapGit' ##NO_TEXT.
+ CONSTANTS c_apack_interface_sap TYPE seoclsname VALUE 'IF_APACK_MANIFEST' ##NO_TEXT.
+ CONSTANTS c_apack_interface_cust TYPE seoclsname VALUE 'ZIF_APACK_MANIFEST' ##NO_TEXT.
+ CONSTANTS c_apack_interface_nspc TYPE seoclsname VALUE '/*/IF_APACK_MANIFEST' ##NO_TEXT.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_cts_api .
+ TYPES:
+ BEGIN OF ty_transport,
+ obj_type TYPE tadir-object,
+ obj_name TYPE tadir-obj_name,
+ trkorr TYPE trkorr,
+ END OF ty_transport .
+ TYPES:
+ ty_transport_list TYPE SORTED TABLE OF ty_transport WITH NON-UNIQUE KEY obj_type obj_name .
+ TYPES:
+ ty_trkorr_tt TYPE STANDARD TABLE OF trkorr WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_transport_key,
+ object TYPE e071k-object,
+ objname TYPE e071k-objname,
+ tabkey TYPE e071k-tabkey,
+ END OF ty_transport_key .
+ TYPES:
+ BEGIN OF ty_transport_data,
+ trstatus TYPE e070-trstatus,
+ as4date TYPE d,
+ keys TYPE STANDARD TABLE OF ty_transport_key WITH DEFAULT KEY,
+ END OF ty_transport_data .
+ TYPES:
+ BEGIN OF ty_transport_obj,
+ object TYPE e071-object,
+ obj_name TYPE e071-obj_name,
+ END OF ty_transport_obj .
+ TYPES:
+ ty_transport_obj_tt TYPE STANDARD TABLE OF ty_transport_obj WITH DEFAULT KEY .
+
+ CONSTANTS:
+ BEGIN OF c_transport_type,
+ wb_request TYPE c LENGTH 1 VALUE 'K', "workbench request
+ wb_repair TYPE c LENGTH 1 VALUE 'R', "workbench repair
+ wb_task TYPE c LENGTH 1 VALUE 'S', "workbench task
+ cust_request TYPE c LENGTH 1 VALUE 'W', "customizing request
+ cust_task TYPE c LENGTH 1 VALUE 'Q', "customizing task
+ END OF c_transport_type .
+ CONSTANTS:
+ BEGIN OF c_transport_category,
+ workbench TYPE c LENGTH 4 VALUE 'SYST',
+ customizing TYPE c LENGTH 4 VALUE 'CUST',
+ END OF c_transport_category .
+ CONSTANTS:
+ BEGIN OF c_transport_mode,
+ insert TYPE c LENGTH 1 VALUE 'I',
+ delete TYPE c LENGTH 1 VALUE 'D',
+ END OF c_transport_mode .
+ CONSTANTS:
+ BEGIN OF c_transport_status,
+ modifiable TYPE c LENGTH 1 VALUE 'D',
+ END OF c_transport_status .
+
+ METHODS confirm_transport_messages
+ RETURNING
+ VALUE(rv_messages_confirmed) TYPE abap_bool .
+
+ METHODS create_transport_entries
+ IMPORTING
+ !iv_transport TYPE trkorr
+ !it_table_ins TYPE ANY TABLE OPTIONAL
+ !it_table_upd TYPE ANY TABLE OPTIONAL
+ !it_table_del TYPE ANY TABLE OPTIONAL
+ !iv_tabname TYPE tabname
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_r3tr_obj_for_limu_obj
+ IMPORTING
+ !iv_object TYPE tadir-object
+ !iv_obj_name TYPE trobj_name
+ EXPORTING
+ !ev_object TYPE tadir-object
+ !ev_obj_name TYPE trobj_name
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_transports_for_list
+ IMPORTING
+ !it_items TYPE zif_abapgit_definitions=>ty_items_tt
+ RETURNING
+ VALUE(rt_transports) TYPE ty_transport_list
+ RAISING
+ zcx_abapgit_exception .
+
+ "! Returns the transport request / task the object is currently in
+ "! @parameter is_item | Object
+ "! @parameter rv_transport | Transport request / task
+ "! @raising zcx_abapgit_exception | Object is not in a transport
+ METHODS get_transport_for_object
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RETURNING
+ VALUE(rv_transport) TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS insert_transport_object
+ IMPORTING
+ !iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object TYPE tadir-object
+ !iv_obj_name TYPE csequence
+ !iv_package TYPE devclass
+ !iv_transport TYPE trkorr OPTIONAL
+ !iv_language TYPE sy-langu DEFAULT sy-langu
+ !iv_mode TYPE c DEFAULT 'I'
+ EXPORTING
+ !ev_object TYPE tadir-object
+ !ev_obj_name TYPE trobj_name
+ RAISING
+ zcx_abapgit_exception .
+
+ "! Check if change recording is possible for the given package
+ "! @parameter iv_package | Package
+ "! @parameter rv_possible | Change recording is possible
+ "! @raising zcx_abapgit_exception | Package could not be loaded
+ METHODS is_chrec_possible_for_package
+ IMPORTING
+ !iv_package TYPE devclass
+ RETURNING
+ VALUE(rv_possible) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+
+ TYPES ty_user_range TYPE RANGE OF sy-uname.
+ TYPES ty_date_range TYPE RANGE OF sy-datum.
+
+ METHODS list_open_requests
+ IMPORTING
+ !it_user TYPE ty_user_range OPTIONAL
+ !it_date TYPE ty_date_range OPTIONAL
+ RETURNING
+ VALUE(rt_trkorr) TYPE ty_trkorr_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS list_r3tr_by_request
+ IMPORTING
+ !iv_request TYPE trkorr
+ RETURNING
+ VALUE(rt_list) TYPE ty_transport_obj_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS read
+ IMPORTING
+ !iv_trkorr TYPE trkorr
+ RETURNING
+ VALUE(rs_request) TYPE ty_transport_data
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS read_description
+ IMPORTING
+ !iv_trkorr TYPE trkorr
+ RETURNING
+ VALUE(rv_description) TYPE string .
+
+ METHODS read_user
+ IMPORTING
+ !iv_trkorr TYPE trkorr
+ RETURNING
+ VALUE(rv_uname) TYPE uname .
+
+ METHODS validate_transport_request
+ IMPORTING
+ !iv_transport_request TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS change_transport_type
+ IMPORTING
+ !iv_transport_request TYPE trkorr
+ !iv_transport_type_from TYPE trfunction
+ !iv_transport_type_to TYPE trfunction
+ RAISING
+ zcx_abapgit_exception.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_data_deserializer .
+ TYPES: BEGIN OF ty_result,
+ type TYPE zif_abapgit_data_config=>ty_config-type,
+ name TYPE zif_abapgit_data_config=>ty_config-name,
+ deletes TYPE REF TO data,
+ updates TYPE REF TO data,
+ inserts TYPE REF TO data,
+ file TYPE zif_abapgit_git_definitions=>ty_file_signature,
+ config TYPE zif_abapgit_git_definitions=>ty_file_signature,
+ in_repo TYPE abap_bool,
+ END OF ty_result.
+ TYPES: ty_results TYPE STANDARD TABLE OF ty_result WITH KEY type name.
+
+ METHODS deserialize_check
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !ii_config TYPE REF TO zif_abapgit_data_config
+ RETURNING
+ VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks-customizing
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS deserialize
+ IMPORTING
+ !iv_package TYPE devclass
+ !ii_config TYPE REF TO zif_abapgit_data_config
+ !it_files TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RETURNING
+ VALUE(rt_result) TYPE ty_results
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS actualize
+ IMPORTING
+ !is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ !it_result TYPE ty_results
+ RETURNING
+ VALUE(rt_accessed_files) TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RAISING
+ zcx_abapgit_exception .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_diff.
+
+* assumes data is UTF8 based with newlines
+ METHODS create
+ IMPORTING
+ !iv_new TYPE xstring
+ !iv_old TYPE xstring
+ !iv_ignore_indentation TYPE abap_bool DEFAULT abap_false
+ !iv_ignore_comments TYPE abap_bool DEFAULT abap_false
+ !iv_ignore_case TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_diff) TYPE REF TO zif_abapgit_diff
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get
+ RETURNING
+ VALUE(rt_diff) TYPE zif_abapgit_definitions=>ty_diffs_tt.
+
+ METHODS stats
+ RETURNING
+ VALUE(rs_count) TYPE zif_abapgit_definitions=>ty_count.
+
+ METHODS set_patch_new
+ IMPORTING
+ !iv_line_new TYPE i
+ !iv_patch_flag TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS set_patch_old
+ IMPORTING
+ !iv_line_old TYPE i
+ !iv_patch_flag TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_beacons
+ RETURNING
+ VALUE(rt_beacons) TYPE zif_abapgit_definitions=>ty_string_tt.
+
+ METHODS is_line_patched
+ IMPORTING
+ iv_index TYPE i
+ RETURNING
+ VALUE(rv_patched) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS set_patch_by_old_diff
+ IMPORTING
+ is_diff_old TYPE zif_abapgit_definitions=>ty_diff
+ iv_patch_flag TYPE abap_bool.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gitv2_porcelain .
+
+ METHODS list_branches
+ IMPORTING
+ !iv_url TYPE string
+ !iv_prefix TYPE string OPTIONAL
+ RETURNING
+ VALUE(ro_list) TYPE REF TO zif_abapgit_git_branch_list
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS list_no_blobs
+ IMPORTING
+ !iv_url TYPE string
+ !iv_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1
+ RETURNING
+ VALUE(rt_expanded) TYPE zif_abapgit_git_definitions=>ty_expanded_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS list_no_blobs_multi
+ IMPORTING
+ !iv_url TYPE string
+ !it_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1_tt
+ RETURNING
+ VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS commits_last_year
+ IMPORTING
+ !iv_url TYPE string
+ !it_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1_tt
+ RETURNING
+ VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS fetch_blob
+ IMPORTING
+ !iv_url TYPE string
+ !iv_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1
+ RETURNING
+ VALUE(rv_blob) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_tadir .
+ METHODS get_object_package
+ IMPORTING
+ !iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object TYPE tadir-object
+ !iv_obj_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_devclass) TYPE tadir-devclass
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS read
+ IMPORTING
+ !iv_package TYPE tadir-devclass
+ !iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
+ !iv_only_local_objects TYPE abap_bool DEFAULT abap_false
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit OPTIONAL
+ !ii_log TYPE REF TO zif_abapgit_log OPTIONAL
+ !it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt OPTIONAL
+ !iv_check_exists TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS read_single
+ IMPORTING
+ !iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object TYPE tadir-object
+ !iv_obj_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rs_tadir) TYPE zif_abapgit_definitions=>ty_tadir.
+
+ METHODS insert_single
+ IMPORTING
+ !iv_pgmid TYPE csequence DEFAULT 'R3TR'
+ !iv_object TYPE csequence
+ !iv_obj_name TYPE csequence
+ !iv_package TYPE csequence OPTIONAL
+ !iv_language TYPE tadir-masterlang OPTIONAL
+ !iv_srcsystem TYPE tadir-srcsystem OPTIONAL
+ !iv_set_genflag TYPE abap_bool DEFAULT abap_false
+ !iv_set_edtflag TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS delete_single
+ IMPORTING
+ !iv_pgmid TYPE csequence DEFAULT 'R3TR'
+ !iv_object TYPE csequence
+ !iv_obj_name TYPE csequence
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_oo_object_fnc.
+
+ CONSTANTS:
+ BEGIN OF c_parts,
+ locals_def TYPE string VALUE 'locals_def',
+ locals_imp TYPE string VALUE 'locals_imp',
+ macros TYPE string VALUE 'macros',
+ testclasses TYPE string VALUE 'testclasses',
+ END OF c_parts.
+
+ TYPES: BEGIN OF ty_includes,
+ programm TYPE syrepid,
+ END OF ty_includes,
+ ty_includes_tt TYPE STANDARD TABLE OF ty_includes WITH DEFAULT KEY.
+
+ TYPES:
+ ty_seoclasstx_tt TYPE STANDARD TABLE OF seoclasstx WITH DEFAULT KEY .
+ TYPES:
+ ty_seocompotx_tt TYPE STANDARD TABLE OF seocompotx WITH DEFAULT KEY .
+ TYPES:
+ ty_seosubcotx_tt TYPE STANDARD TABLE OF seosubcotx WITH DEFAULT KEY .
+
+ TYPES:
+ BEGIN OF ty_obj_attribute,
+ cmpname TYPE seocmpname,
+ attkeyfld TYPE seokeyfld,
+ attbusobj TYPE seobusobj,
+ exposure TYPE seoexpose,
+ END OF ty_obj_attribute .
+ TYPES:
+ ty_obj_attribute_tt TYPE STANDARD TABLE OF ty_obj_attribute WITH DEFAULT KEY
+ WITH NON-UNIQUE SORTED KEY cmpname COMPONENTS cmpname .
+
+ METHODS:
+ create
+ IMPORTING
+ iv_check TYPE abap_bool
+ iv_package TYPE devclass
+ it_attributes TYPE ty_obj_attribute_tt OPTIONAL
+ CHANGING
+ cg_properties TYPE any
+ RAISING
+ zcx_abapgit_exception,
+ generate_locals
+ IMPORTING
+ is_key TYPE seoclskey
+ it_local_definitions TYPE seop_source_string OPTIONAL
+ it_local_implementations TYPE seop_source_string OPTIONAL
+ it_local_macros TYPE seop_source_string OPTIONAL
+ it_local_test_classes TYPE seop_source_string OPTIONAL
+ iv_package TYPE devclass
+ iv_version TYPE uccheck
+ RAISING
+ zcx_abapgit_exception,
+ deserialize_source
+ IMPORTING
+ is_key TYPE seoclskey
+ it_source TYPE zif_abapgit_definitions=>ty_string_tt
+ iv_package TYPE devclass
+ iv_version TYPE uccheck
+ RAISING
+ zcx_abapgit_exception
+ cx_sy_dyn_call_error,
+ insert_text_pool
+ IMPORTING
+ iv_class_name TYPE seoclsname
+ it_text_pool TYPE textpool_table
+ iv_language TYPE spras
+ iv_state TYPE c DEFAULT 'I'
+ RAISING
+ zcx_abapgit_exception,
+ update_descriptions_class
+ IMPORTING
+ is_key TYPE seoclskey
+ iv_language TYPE spras
+ it_descriptions TYPE ty_seoclasstx_tt,
+ update_descriptions_compo
+ IMPORTING
+ is_key TYPE seoclskey
+ it_descriptions TYPE ty_seocompotx_tt,
+ update_descriptions_subco
+ IMPORTING
+ is_key TYPE seoclskey
+ it_descriptions TYPE ty_seosubcotx_tt,
+ add_to_activation_list
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ RAISING
+ zcx_abapgit_exception,
+ create_sotr
+ IMPORTING
+ iv_object_name TYPE sobj_name
+ iv_package TYPE devclass
+ ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception,
+ create_documentation
+ IMPORTING
+ it_lines TYPE tlinetab
+ iv_id TYPE dokhl-id
+ iv_object_name TYPE dokhl-object
+ iv_language TYPE spras
+ iv_no_masterlang TYPE abap_bool OPTIONAL
+ RAISING
+ zcx_abapgit_exception,
+ delete_documentation
+ IMPORTING
+ iv_id TYPE dokhl-id
+ iv_object_name TYPE dokhl-object
+ iv_language TYPE spras
+ RAISING
+ zcx_abapgit_exception,
+ get_includes
+ IMPORTING
+ iv_object_name TYPE sobj_name
+ RETURNING
+ VALUE(rt_includes) TYPE ty_includes_tt
+ RAISING
+ zcx_abapgit_exception,
+ exists
+ IMPORTING
+ iv_object_name TYPE seoclsname
+ RETURNING
+ VALUE(rv_exists) TYPE abap_bool,
+ serialize_abap
+ IMPORTING
+ is_class_key TYPE seoclskey
+ iv_type TYPE seop_include_ext_app OPTIONAL
+ RETURNING
+ VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt
+ RAISING
+ zcx_abapgit_exception
+ cx_sy_dyn_call_error,
+ get_skip_test_classes
+ RETURNING
+ VALUE(rv_skip) TYPE abap_bool,
+ get_class_properties
+ IMPORTING
+ is_class_key TYPE seoclskey
+ RETURNING
+ VALUE(rs_class_properties) TYPE vseoclass
+ RAISING
+ zcx_abapgit_exception,
+ get_interface_properties
+ IMPORTING
+ is_interface_key TYPE seoclskey
+ RETURNING
+ VALUE(rs_interface_properties) TYPE vseointerf
+ RAISING
+ zcx_abapgit_exception,
+ read_text_pool
+ IMPORTING
+ iv_class_name TYPE seoclsname
+ iv_language TYPE spras
+ RETURNING
+ VALUE(rt_text_pool) TYPE textpool_table,
+ read_documentation
+ IMPORTING
+ iv_id TYPE dokhl-id
+ iv_object_name TYPE dokhl-object
+ iv_language TYPE spras
+ RETURNING
+ VALUE(rt_lines) TYPE tlinetab,
+ read_sotr
+ IMPORTING
+ iv_object_name TYPE sobj_name
+ ii_xml TYPE REF TO zif_abapgit_xml_output
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params
+ RAISING
+ zcx_abapgit_exception,
+ read_descriptions_class
+ IMPORTING
+ iv_object_name TYPE seoclsname
+ iv_language TYPE spras OPTIONAL
+ RETURNING
+ VALUE(rt_descriptions) TYPE ty_seoclasstx_tt,
+ read_descriptions_compo
+ IMPORTING
+ iv_object_name TYPE seoclsname
+ iv_language TYPE spras OPTIONAL
+ RETURNING
+ VALUE(rt_descriptions) TYPE ty_seocompotx_tt,
+ read_descriptions_subco
+ IMPORTING
+ iv_object_name TYPE seoclsname
+ iv_language TYPE spras OPTIONAL
+ RETURNING
+ VALUE(rt_descriptions) TYPE ty_seosubcotx_tt,
+ delete
+ IMPORTING
+ is_deletion_key TYPE seoclskey
+ RAISING
+ zcx_abapgit_exception,
+ read_superclass
+ IMPORTING
+ iv_classname TYPE seoclsname
+ RETURNING
+ VALUE(rv_superclass) TYPE seoclsname,
+ read_attributes
+ IMPORTING
+ iv_object_name TYPE seoclsname
+ RETURNING
+ VALUE(rt_attributes) TYPE ty_obj_attribute_tt,
+ syntax_check
+ IMPORTING
+ iv_object_name TYPE seoclsname
+ RAISING
+ zcx_abapgit_exception.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_sap_namespace .
+
+ METHODS exists
+ IMPORTING
+ iv_namespace TYPE trnspace-namespace
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+
+ METHODS is_editable
+ IMPORTING
+ iv_namespace TYPE trnspace-namespace
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+
+ METHODS split_by_name
+ IMPORTING
+ iv_obj_with_namespace TYPE csequence
+ iv_allow_slash_in_name TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rs_obj_namespace) TYPE zif_abapgit_definitions=>ty_obj_namespace
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_sap_package .
+ TYPES:
+ ty_devclass_tt TYPE STANDARD TABLE OF devclass WITH DEFAULT KEY .
+
+ TYPES: BEGIN OF ty_create,
+ devclass TYPE devclass,
+ dlvunit TYPE tdevc-dlvunit,
+ component TYPE c LENGTH 20,
+ ctext TYPE c LENGTH 60,
+ parentcl TYPE devclass,
+ pdevclass TYPE c LENGTH 4,
+ as4user TYPE usnam,
+ END OF ty_create.
+
+ METHODS get
+ RETURNING
+ VALUE(rs_package) TYPE ty_create
+ RAISING
+ zcx_abapgit_exception .
+ METHODS validate_name
+ RAISING
+ zcx_abapgit_exception .
+ METHODS create
+ IMPORTING
+ !is_package TYPE ty_create
+ RAISING
+ zcx_abapgit_exception .
+ METHODS create_local
+ RAISING
+ zcx_abapgit_exception .
+ METHODS list_subpackages
+ RETURNING
+ VALUE(rt_list) TYPE ty_devclass_tt .
+ METHODS list_superpackages
+ RETURNING
+ VALUE(rt_list) TYPE ty_devclass_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_parent
+ RETURNING
+ VALUE(rv_parentcl) TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_description
+ RETURNING
+ VALUE(rv_description) TYPE string.
+ METHODS read_responsible
+ RETURNING
+ VALUE(rv_responsible) TYPE usnam.
+ METHODS create_child
+ IMPORTING
+ !iv_child TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ METHODS exists
+ RETURNING
+ VALUE(rv_bool) TYPE abap_bool .
+ METHODS are_changes_recorded_in_tr_req
+ RETURNING
+ VALUE(rv_are_changes_rec_in_tr_req) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_transport_type
+ RETURNING
+ VALUE(rs_transport_type) TYPE zif_abapgit_definitions=>ty_transport_type
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_default_transport_layer
+ RETURNING
+ VALUE(rv_transport_layer) TYPE devlayer
+ RAISING
+ zcx_abapgit_exception.
+ METHODS check_object_type
+ IMPORTING
+ iv_obj_type TYPE tadir-object
+ RAISING
+ zcx_abapgit_exception.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_sap_report.
+
+ TYPES:
+ BEGIN OF ty_progdir,
+ name TYPE progdir-name,
+ state TYPE progdir-state,
+ sqlx TYPE progdir-sqlx,
+ edtx TYPE progdir-edtx,
+ varcl TYPE progdir-varcl,
+ dbapl TYPE progdir-dbapl,
+ dbna TYPE progdir-dbna,
+ clas TYPE progdir-clas,
+ type TYPE progdir-type,
+ occurs TYPE progdir-occurs,
+ subc TYPE progdir-subc,
+ appl TYPE progdir-appl,
+ secu TYPE progdir-secu,
+ cnam TYPE progdir-cnam,
+ cdat TYPE progdir-cdat,
+ unam TYPE progdir-unam,
+ udat TYPE progdir-udat,
+ vern TYPE progdir-vern,
+ levl TYPE progdir-levl,
+ rstat TYPE progdir-rstat,
+ rmand TYPE progdir-rmand,
+ rload TYPE progdir-rload,
+ fixpt TYPE progdir-fixpt,
+ sset TYPE progdir-sset,
+ sdate TYPE progdir-sdate,
+ stime TYPE progdir-stime,
+ idate TYPE progdir-idate,
+ itime TYPE progdir-itime,
+ ldbname TYPE progdir-ldbname,
+ uccheck TYPE progdir-uccheck,
+ END OF ty_progdir.
+
+ METHODS read_report
+ IMPORTING
+ iv_name TYPE syrepid
+ iv_state TYPE r3state OPTIONAL
+ is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ RETURNING
+ VALUE(rt_source) TYPE abaptxt255_tab
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS insert_report
+ IMPORTING
+ iv_name TYPE syrepid
+ it_source TYPE STANDARD TABLE
+ iv_state TYPE r3state OPTIONAL
+ iv_program_type TYPE c OPTIONAL
+ iv_extension_type TYPE c OPTIONAL
+ iv_package TYPE devclass
+ iv_version TYPE uccheck
+ is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS update_report
+ IMPORTING
+ iv_name TYPE syrepid
+ it_source TYPE STANDARD TABLE
+ iv_state TYPE r3state OPTIONAL
+ iv_program_type TYPE c OPTIONAL
+ iv_extension_type TYPE c OPTIONAL
+ iv_package TYPE devclass
+ iv_version TYPE uccheck
+ is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ RETURNING
+ VALUE(rv_updated) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS delete_report
+ IMPORTING
+ iv_name TYPE syrepid
+ iv_raise_error TYPE abap_bool DEFAULT abap_false
+ is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS read_progdir
+ IMPORTING
+ iv_name TYPE syrepid
+ iv_state TYPE r3state DEFAULT 'A'
+ RETURNING
+ VALUE(rs_progdir) TYPE ty_progdir
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS update_progdir
+ IMPORTING
+ is_progdir TYPE ty_progdir
+ iv_package TYPE devclass
+ iv_state TYPE r3state DEFAULT 'I'
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_longtexts .
+
+ TYPES:
+ BEGIN OF ty_longtext,
+ dokil TYPE dokil,
+ head TYPE thead,
+ lines TYPE tline_tab,
+ END OF ty_longtext .
+ TYPES:
+ ty_longtexts TYPE STANDARD TABLE OF ty_longtext WITH NON-UNIQUE DEFAULT KEY .
+
+ METHODS changed_by
+ IMPORTING
+ !iv_object_name TYPE tadir-obj_name
+ !iv_longtext_id TYPE dokil-id
+ !it_dokil TYPE zif_abapgit_definitions=>ty_dokil_tt OPTIONAL
+ RETURNING
+ VALUE(rv_user) TYPE syuname
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize
+ IMPORTING
+ !iv_longtext_name TYPE string DEFAULT 'LONGTEXTS'
+ !iv_object_name TYPE clike
+ !iv_longtext_id TYPE dokil-id
+ !it_dokil TYPE zif_abapgit_definitions=>ty_dokil_tt OPTIONAL
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params
+ RETURNING
+ VALUE(rt_longtexts) TYPE ty_longtexts
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize
+ IMPORTING
+ !iv_longtext_name TYPE string DEFAULT 'LONGTEXTS'
+ !iv_object_name TYPE clike
+ !iv_longtext_id TYPE dokil-id
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ !iv_main_language TYPE sy-langu
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete
+ IMPORTING
+ !iv_object_name TYPE tadir-obj_name
+ !iv_longtext_id TYPE dokil-id
+ RAISING
+ zcx_abapgit_exception .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_object_tabl.
+ CONSTANTS: BEGIN OF c_s_dataname,
+ segment_definition TYPE string VALUE 'SEGMENT_DEFINITION',
+ tabl_extras TYPE string VALUE 'TABL_EXTRAS',
+ END OF c_s_dataname.
+
+ TYPES: BEGIN OF ty_dd02_text,
+ ddlanguage TYPE dd02t-ddlanguage,
+ ddtext TYPE dd02t-ddtext,
+ END OF ty_dd02_text.
+
+ TYPES ty_dd02_texts TYPE STANDARD TABLE OF ty_dd02_text WITH DEFAULT KEY.
+
+ TYPES ty_dd03p_tt TYPE STANDARD TABLE OF dd03p WITH DEFAULT KEY.
+
+ TYPES: BEGIN OF ty_segment_definition,
+ segmentheader TYPE edisegmhd,
+ segmentdefinition TYPE edisegmdef,
+ segmentstructures TYPE STANDARD TABLE OF edisegstru WITH DEFAULT KEY,
+ END OF ty_segment_definition.
+
+ TYPES: ty_segment_definitions TYPE STANDARD TABLE OF ty_segment_definition WITH DEFAULT KEY.
+
+ TYPES: BEGIN OF ty_tabl_extras,
+ tddat TYPE tddat,
+ abap_language_version TYPE uccheck,
+ END OF ty_tabl_extras.
+
+ TYPES: BEGIN OF ty_internal,
+ dd02v TYPE dd02v,
+ dd09l TYPE dd09l,
+ dd03p TYPE ty_dd03p_tt,
+ dd05m TYPE STANDARD TABLE OF dd05m WITH DEFAULT KEY,
+ dd08v TYPE STANDARD TABLE OF dd08v WITH DEFAULT KEY,
+ dd12v TYPE STANDARD TABLE OF dd12v WITH DEFAULT KEY,
+ dd17v TYPE STANDARD TABLE OF dd17v WITH DEFAULT KEY,
+ dd35v TYPE STANDARD TABLE OF dd35v WITH DEFAULT KEY,
+ dd36m TYPE STANDARD TABLE OF dd36m WITH DEFAULT KEY,
+ dd02_texts TYPE ty_dd02_texts,
+ i18n_langs TYPE STANDARD TABLE OF langu WITH DEFAULT KEY,
+ longtexts TYPE zif_abapgit_longtexts=>ty_longtexts,
+ segment_definitions TYPE ty_segment_definitions,
+ extras TYPE ty_tabl_extras,
+ END OF ty_internal.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_objects.
+
+ TYPES:
+ BEGIN OF ty_serialization,
+ files TYPE zif_abapgit_git_definitions=>ty_files_tt,
+ item TYPE zif_abapgit_definitions=>ty_item,
+ END OF ty_serialization .
+ TYPES:
+ BEGIN OF ty_deserialization,
+ obj TYPE REF TO zif_abapgit_object,
+ xml TYPE REF TO zif_abapgit_xml_input,
+ package TYPE devclass,
+ item TYPE zif_abapgit_definitions=>ty_item,
+ files TYPE REF TO zcl_abapgit_objects_files,
+ END OF ty_deserialization .
+ TYPES:
+ ty_deserialization_tt TYPE STANDARD TABLE OF ty_deserialization WITH DEFAULT KEY .
+ TYPES:
+ ty_types_tt TYPE SORTED TABLE OF tadir-object WITH UNIQUE KEY table_line.
+ TYPES:
+ ty_deserialization_step TYPE string.
+ TYPES:
+ ty_deserialization_step_tt TYPE STANDARD TABLE OF ty_deserialization_step WITH DEFAULT KEY.
+ TYPES:
+ BEGIN OF ty_step_data,
+ step_id TYPE ty_deserialization_step,
+ order TYPE i,
+ descr TYPE string,
+ syntax_check TYPE abap_bool,
+ objects TYPE ty_deserialization_tt,
+ END OF ty_step_data .
+ TYPES:
+ ty_step_data_tt TYPE STANDARD TABLE OF ty_step_data
+ WITH DEFAULT KEY .
+
+ CONSTANTS:
+ BEGIN OF c_deserialize_action,
+ " also used to determine priority if object has multiple changes, so don't change order
+ no_support TYPE i VALUE -1,
+ none TYPE i VALUE 0,
+ add TYPE i VALUE 1,
+ update TYPE i VALUE 2,
+ overwrite TYPE i VALUE 3,
+ delete TYPE i VALUE 4,
+ delete_add TYPE i VALUE 5,
+ packmove TYPE i VALUE 6,
+ data_loss TYPE i VALUE 7,
+ END OF c_deserialize_action.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_object.
+
+ CONSTANTS:
+ BEGIN OF gc_step_id,
+ early TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'EARLY',
+ abap TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'ABAP',
+ ddic TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'DDIC',
+ late TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'LATE',
+ lxe TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'LXE',
+ END OF gc_step_id.
+
+ METHODS serialize
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS deserialize
+ IMPORTING
+ !iv_package TYPE devclass
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ !iv_step TYPE zif_abapgit_objects=>ty_deserialization_step
+ !ii_log TYPE REF TO zif_abapgit_log
+ !iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS delete
+ IMPORTING
+ !iv_package TYPE devclass
+ !iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS exists
+ RETURNING
+ VALUE(rv_bool) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS is_locked
+ RETURNING
+ VALUE(rv_is_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS is_active
+ RETURNING
+ VALUE(rv_active) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS changed_by
+ IMPORTING
+ !iv_extra TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_user) TYPE syuname
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS jump
+ IMPORTING
+ !iv_extra TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_exit) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_metadata
+ RETURNING
+ VALUE(rs_metadata) TYPE zif_abapgit_definitions=>ty_metadata .
+
+ METHODS get_comparator
+ RETURNING
+ VALUE(ri_comparator) TYPE REF TO zif_abapgit_comparator
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_deserialize_steps
+ RETURNING
+ VALUE(rt_steps) TYPE zif_abapgit_objects=>ty_deserialization_step_tt.
+
+ METHODS get_deserialize_order
+ IMPORTING
+ !it_all_objects TYPE zif_abapgit_definitions=>ty_items_tt
+ RETURNING
+ VALUE(rt_objects_before) TYPE zif_abapgit_definitions=>ty_items_tt.
+
+ CLASS-METHODS map_filename_to_object
+ IMPORTING
+ !iv_item_part_of_filename TYPE string
+ !iv_path TYPE string OPTIONAL
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit OPTIONAL
+ !iv_package TYPE devclass OPTIONAL
+ CHANGING
+ cs_item TYPE zif_abapgit_definitions=>ty_item
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS map_object_to_filename
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_ext TYPE string
+ !iv_extra TYPE clike
+ CHANGING
+ !cv_item_part_of_filename TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_object_filter .
+
+ METHODS get_filter
+ RETURNING
+ VALUE(rt_filter) TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_merge .
+
+ TYPES:
+ BEGIN OF ty_merge,
+ repo_online TYPE REF TO zif_abapgit_repo_online,
+ source TYPE zif_abapgit_git_definitions=>ty_git_branch,
+ target TYPE zif_abapgit_git_definitions=>ty_git_branch,
+ common TYPE zif_abapgit_definitions=>ty_ancestor,
+ stree TYPE zif_abapgit_git_definitions=>ty_expanded_tt,
+ ttree TYPE zif_abapgit_git_definitions=>ty_expanded_tt,
+ ctree TYPE zif_abapgit_git_definitions=>ty_expanded_tt,
+ result TYPE zif_abapgit_git_definitions=>ty_expanded_tt,
+ stage TYPE REF TO zcl_abapgit_stage,
+ conflict TYPE string,
+ END OF ty_merge .
+ TYPES:
+ BEGIN OF ty_merge_conflict,
+ path TYPE string,
+ filename TYPE string,
+ source_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ source_data TYPE xstring,
+ target_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ target_data TYPE xstring,
+ result_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ result_data TYPE xstring,
+ END OF ty_merge_conflict .
+ TYPES:
+ ty_merge_conflict_tt TYPE STANDARD TABLE OF ty_merge_conflict WITH DEFAULT KEY .
+
+ METHODS get_conflicts
+ RETURNING
+ VALUE(rt_conflicts) TYPE ty_merge_conflict_tt .
+ METHODS get_result
+ RETURNING
+ VALUE(rs_merge) TYPE ty_merge .
+ METHODS get_source_branch
+ RETURNING
+ VALUE(rv_source_branch) TYPE string .
+ METHODS has_conflicts
+ RETURNING
+ VALUE(rv_conflicts_exists) TYPE abap_bool .
+ METHODS resolve_conflict
+ IMPORTING
+ !is_conflict TYPE ty_merge_conflict
+ RAISING
+ zcx_abapgit_exception .
+ METHODS run
+ RAISING
+ zcx_abapgit_exception .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_stage_logic .
+
+ METHODS get
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo
+ !ii_obj_filter TYPE REF TO zif_abapgit_object_filter OPTIONAL
+ RETURNING
+ VALUE(rs_files) TYPE zif_abapgit_definitions=>ty_stage_files
+ RAISING
+ zcx_abapgit_exception .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_status_calc.
+
+ METHODS calculate_status
+ IMPORTING
+ !it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ !it_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ !it_cur_state TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RETURNING
+ VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_dot_abapgit.
+
+ TYPES:
+ BEGIN OF ty_requirement,
+ component TYPE tdevc-dlvunit,
+ min_release TYPE saprelease,
+ min_patch TYPE sappatchlv,
+ END OF ty_requirement .
+ TYPES:
+ ty_requirement_tt TYPE STANDARD TABLE OF ty_requirement WITH DEFAULT KEY .
+
+ TYPES:
+ BEGIN OF ty_dot_abapgit,
+ name TYPE string,
+ master_language TYPE spras,
+ i18n_languages TYPE zif_abapgit_definitions=>ty_languages,
+ use_lxe TYPE abap_bool,
+ without_translation TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
+ starting_folder TYPE string,
+ folder_logic TYPE string,
+ ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
+ requirements TYPE ty_requirement_tt,
+ version_constant TYPE string,
+ abap_language_version TYPE string,
+ original_system TYPE tadir-srcsystem,
+ END OF ty_dot_abapgit .
+
+ CONSTANTS:
+ BEGIN OF c_folder_logic,
+ prefix TYPE string VALUE 'PREFIX',
+ full TYPE string VALUE 'FULL',
+ mixed TYPE string VALUE 'MIXED',
+ END OF c_folder_logic,
+
+ BEGIN OF c_abap_language_version,
+ standard TYPE string VALUE 'standard',
+ key_user TYPE string VALUE 'keyUser',
+ cloud_development TYPE string VALUE 'cloudDevelopment',
+ ignore TYPE string VALUE 'ignore',
+ undefined TYPE string VALUE 'undefined', " any
+ END OF c_abap_language_version.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_persistence.
+
+ TYPES:
+ ty_type TYPE c LENGTH 12 .
+ TYPES:
+ ty_value TYPE c LENGTH 12 .
+ TYPES:
+ BEGIN OF ty_content,
+ type TYPE ty_type,
+ value TYPE ty_value,
+ data_str TYPE string,
+ END OF ty_content .
+ TYPES:
+ ty_contents TYPE SORTED TABLE OF ty_content WITH UNIQUE KEY type value .
+
+ TYPES: BEGIN OF ty_local_checksum,
+ item TYPE zif_abapgit_definitions=>ty_item_signature,
+ files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt,
+ END OF ty_local_checksum.
+
+ TYPES:
+ BEGIN OF ty_local_settings,
+ display_name TYPE string,
+ ignore_subpackages TYPE abap_bool,
+ write_protected TYPE abap_bool,
+ only_local_objects TYPE abap_bool,
+ code_inspector_check_variant TYPE sci_chkv,
+ block_commit TYPE abap_bool,
+ main_language_only TYPE abap_bool,
+ suppress_lxe_po_comments TYPE abap_bool,
+ labels TYPE string,
+ transport_request TYPE trkorr,
+ customizing_request TYPE trkorr,
+ flow TYPE abap_bool,
+ exclude_remote_paths TYPE string_table,
+ END OF ty_local_settings.
+
+ TYPES: ty_local_checksum_tt TYPE STANDARD TABLE OF ty_local_checksum WITH DEFAULT KEY.
+ TYPES: ty_local_checksum_by_item_tt TYPE SORTED TABLE OF ty_local_checksum
+ WITH NON-UNIQUE KEY item-obj_type item-obj_name.
+
+ TYPES: BEGIN OF ty_repo_xml,
+ url TYPE string,
+ branch_name TYPE string,
+ selected_commit TYPE zif_abapgit_git_definitions=>ty_sha1,
+ package TYPE devclass,
+ created_by TYPE syuname,
+ created_at TYPE timestampl,
+ deserialized_by TYPE syuname,
+ deserialized_at TYPE timestampl,
+ offline TYPE abap_bool,
+ switched_origin TYPE string,
+ dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit,
+ head_branch TYPE string, " HEAD symref of the repo, master branch
+ local_settings TYPE ty_local_settings,
+ END OF ty_repo_xml.
+
+ TYPES:
+ BEGIN OF ty_repo_meta_mask,
+ url TYPE abap_bool,
+ branch_name TYPE abap_bool,
+ selected_commit TYPE abap_bool,
+ package TYPE abap_bool,
+ created_by TYPE abap_bool,
+ created_at TYPE abap_bool,
+ deserialized_by TYPE abap_bool,
+ deserialized_at TYPE abap_bool,
+ offline TYPE abap_bool,
+ switched_origin TYPE abap_bool,
+ dot_abapgit TYPE abap_bool,
+ head_branch TYPE abap_bool,
+ local_settings TYPE abap_bool,
+ END OF ty_repo_meta_mask.
+
+ TYPES: BEGIN OF ty_repo,
+ key TYPE ty_value.
+ INCLUDE TYPE ty_repo_xml.
+ TYPES: END OF ty_repo.
+ TYPES: ty_repos TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY.
+ TYPES: ty_repo_keys TYPE STANDARD TABLE OF ty_repo-key WITH DEFAULT KEY.
+
+ TYPES:
+ BEGIN OF ty_remote_settings,
+ offline TYPE ty_repo-offline,
+ url TYPE ty_repo-url,
+ branch TYPE zif_abapgit_git_definitions=>ty_git_branch-name,
+ tag TYPE zif_abapgit_git_definitions=>ty_git_tag-name,
+ commit TYPE zif_abapgit_git_definitions=>ty_commit-sha1,
+ pull_request TYPE string,
+ head_type TYPE zif_abapgit_git_definitions=>ty_head_type,
+ switched_origin TYPE ty_repo-switched_origin,
+ END OF ty_remote_settings.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_exit.
+
+ TYPES:
+ BEGIN OF ty_ci_repo,
+ name TYPE string,
+ clone_url TYPE string,
+ END OF ty_ci_repo.
+
+ TYPES ty_ci_repos TYPE STANDARD TABLE OF ty_ci_repo WITH DEFAULT KEY.
+
+ TYPES ty_object_types TYPE HASHED TABLE OF tadir-object WITH UNIQUE KEY table_line.
+
+ TYPES:
+ BEGIN OF ty_class_key,
+ clsname TYPE abap_classname,
+ END OF ty_class_key.
+
+ METHODS adjust_display_commit_url
+ IMPORTING
+ !iv_repo_url TYPE csequence
+ !iv_repo_name TYPE csequence
+ !iv_repo_key TYPE csequence
+ !iv_commit_hash TYPE zif_abapgit_git_definitions=>ty_sha1
+ CHANGING
+ !cv_display_url TYPE csequence
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS adjust_display_filename
+ IMPORTING
+ !is_repo_meta TYPE zif_abapgit_persistence=>ty_repo
+ !iv_filename TYPE string
+ RETURNING
+ VALUE(rv_filename) TYPE string.
+
+ METHODS allow_sap_objects
+ RETURNING
+ VALUE(rv_allowed) TYPE abap_bool.
+
+ METHODS change_local_host
+ CHANGING
+ !ct_hosts TYPE zif_abapgit_definitions=>ty_string_tt.
+
+ METHODS change_max_parallel_processes
+ IMPORTING
+ !iv_package TYPE devclass
+ CHANGING
+ !cv_max_processes TYPE i.
+
+ METHODS change_proxy_authentication
+ IMPORTING
+ !iv_repo_url TYPE csequence
+ CHANGING
+ !cv_proxy_authentication TYPE abap_bool.
+
+ METHODS change_proxy_port
+ IMPORTING
+ !iv_repo_url TYPE csequence
+ CHANGING
+ !cv_proxy_port TYPE string.
+
+ METHODS change_proxy_url
+ IMPORTING
+ !iv_repo_url TYPE csequence
+ CHANGING
+ !cv_proxy_url TYPE string.
+
+ METHODS change_rfc_server_group
+ CHANGING
+ !cv_group TYPE rzlli_apcl.
+
+ METHODS change_supported_data_objects
+ CHANGING
+ !ct_objects TYPE zif_abapgit_data_supporter=>ty_objects.
+
+ METHODS change_supported_object_types
+ CHANGING
+ !ct_types TYPE ty_object_types.
+
+ METHODS change_tadir
+ IMPORTING
+ !iv_package TYPE devclass
+ !ii_log TYPE REF TO zif_abapgit_log
+ !is_dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit
+ !iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
+ !iv_only_local_objects TYPE abap_bool DEFAULT abap_false
+ CHANGING
+ !ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
+
+ METHODS create_http_client
+ IMPORTING
+ !iv_url TYPE string
+ RETURNING
+ VALUE(ri_client) TYPE REF TO if_http_client
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS custom_serialize_abap_clif
+ IMPORTING
+ !is_class_key TYPE ty_class_key
+ !it_source TYPE zif_abapgit_definitions=>ty_string_tt OPTIONAL
+ RETURNING
+ VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS deserialize_postprocess
+ IMPORTING
+ !is_step TYPE zif_abapgit_objects=>ty_step_data
+ !ii_log TYPE REF TO zif_abapgit_log.
+
+ METHODS determine_transport_request
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !iv_transport_type TYPE zif_abapgit_definitions=>ty_transport_type
+ CHANGING
+ !cv_transport_request TYPE trkorr.
+
+ METHODS enhance_any_toolbar
+ IMPORTING
+ !io_menu TYPE REF TO zcl_abapgit_html_toolbar.
+
+ METHODS enhance_repo_toolbar
+ IMPORTING
+ !io_menu TYPE REF TO zcl_abapgit_html_toolbar
+ !iv_key TYPE zif_abapgit_persistence=>ty_value
+ !iv_act TYPE string.
+
+ METHODS get_ci_tests
+ IMPORTING
+ !iv_object TYPE tadir-object
+ CHANGING
+ !ct_ci_repos TYPE ty_ci_repos.
+
+ METHODS get_ssl_id
+ RETURNING
+ VALUE(rv_ssl_id) TYPE ssfapplssl.
+
+ METHODS http_client
+ IMPORTING
+ !iv_url TYPE string
+ !ii_client TYPE REF TO if_http_client.
+
+ METHODS on_event
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS pre_calculate_repo_status
+ IMPORTING
+ !is_repo_meta TYPE zif_abapgit_persistence=>ty_repo
+ CHANGING
+ !ct_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ !ct_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS serialize_postprocess
+ IMPORTING
+ !iv_package TYPE devclass
+ !ii_log TYPE REF TO zif_abapgit_log
+ CHANGING
+ !ct_files TYPE zif_abapgit_definitions=>ty_files_item_tt.
+
+ METHODS validate_before_push
+ IMPORTING
+ !is_comment TYPE zif_abapgit_git_definitions=>ty_comment
+ !io_stage TYPE REF TO zcl_abapgit_stage
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS wall_message_list
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html.
+
+ METHODS wall_message_repo
+ IMPORTING
+ !is_repo_meta TYPE zif_abapgit_persistence=>ty_repo
+ !ii_html TYPE REF TO zif_abapgit_html.
+
+ METHODS change_committer_info
+ IMPORTING
+ iv_repo_url TYPE csequence
+ CHANGING
+ cv_name TYPE csequence
+ cv_email TYPE csequence.
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_jumper.
+
+ TYPES:
+ ty_bdcdata_tt TYPE STANDARD TABLE OF bdcdata WITH DEFAULT KEY.
+
+ METHODS jump
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !is_sub_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ !iv_line_number TYPE i OPTIONAL
+ !iv_new_window TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rv_exit) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS jump_adt
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_sub_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name
+ !iv_line_number TYPE i
+ RETURNING
+ VALUE(rv_exit) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS jump_batch_input
+ IMPORTING
+ !iv_tcode TYPE sy-tcode
+ !it_bdcdata TYPE ty_bdcdata_tt
+ !iv_new_window TYPE abap_bool DEFAULT abap_true
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS jump_abapgit
+ IMPORTING
+ !iv_language TYPE spras
+ !iv_key TYPE zif_abapgit_persistence=>ty_value
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_persist_background.
+
+ TYPES:
+ BEGIN OF ty_xml,
+ method TYPE string,
+ username TYPE string,
+ password TYPE string,
+ settings TYPE zif_abapgit_background=>ty_settings_tt,
+ END OF ty_xml.
+
+ TYPES:
+ BEGIN OF ty_background,
+ key TYPE zif_abapgit_persistence=>ty_value.
+ INCLUDE TYPE ty_xml.
+ TYPES: END OF ty_background.
+
+ TYPES ty_background_keys TYPE STANDARD TABLE OF ty_background WITH DEFAULT KEY.
+
+ METHODS list
+ RETURNING
+ VALUE(rt_list) TYPE ty_background_keys
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_by_key
+ IMPORTING
+ !iv_key TYPE ty_background-key
+ RETURNING
+ VALUE(rs_data) TYPE ty_background
+ RAISING
+ zcx_abapgit_exception
+ zcx_abapgit_not_found.
+
+ METHODS modify
+ IMPORTING
+ !is_data TYPE ty_background
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS delete
+ IMPORTING
+ !iv_key TYPE ty_background-key
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS exists
+ IMPORTING
+ !iv_key TYPE ty_background-key
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_persist_repo .
+ METHODS add
+ IMPORTING
+ !iv_url TYPE string OPTIONAL
+ !iv_branch_name TYPE string OPTIONAL
+ !iv_branch TYPE zif_abapgit_git_definitions=>ty_sha1 OPTIONAL
+ !iv_display_name TYPE string OPTIONAL
+ !iv_package TYPE devclass
+ !iv_offline TYPE abap_bool DEFAULT abap_false
+ !is_dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit
+ RETURNING
+ VALUE(rv_key) TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ METHODS exists
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+ METHODS list
+ RETURNING
+ VALUE(rt_repos) TYPE zif_abapgit_persistence=>ty_repos
+ RAISING
+ zcx_abapgit_exception .
+ METHODS list_by_keys
+ IMPORTING
+ it_keys TYPE zif_abapgit_persistence=>ty_repo_keys
+ RETURNING
+ VALUE(rt_repos) TYPE zif_abapgit_persistence=>ty_repos
+ RAISING
+ zcx_abapgit_exception .
+ METHODS lock
+ IMPORTING
+ !iv_mode TYPE enqmode
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RETURNING
+ VALUE(rs_repo) TYPE zif_abapgit_persistence=>ty_repo
+ RAISING
+ zcx_abapgit_exception
+ zcx_abapgit_not_found .
+ METHODS update_metadata
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !is_meta TYPE zif_abapgit_persistence=>ty_repo_xml
+ !is_change_mask TYPE zif_abapgit_persistence=>ty_repo_meta_mask
+ RAISING
+ zcx_abapgit_exception .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_persist_repo_cs .
+
+ METHODS update
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !iv_cs_blob TYPE zif_abapgit_persistence=>ty_content-data_str
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RETURNING
+ VALUE(rv_cs_blob) TYPE zif_abapgit_persistence=>ty_content-data_str
+ RAISING
+ zcx_abapgit_exception
+ zcx_abapgit_not_found .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_persist_user .
+
+ TYPES ty_favorites TYPE zif_abapgit_persistence=>ty_repo_keys .
+
+ TYPES:
+ BEGIN OF ty_s_user_settings,
+ max_lines TYPE i,
+ adt_jump_enabled TYPE abap_bool,
+ show_default_repo TYPE abap_bool,
+ link_hints_enabled TYPE abap_bool,
+ link_hint_key TYPE c LENGTH 1,
+ parallel_proc_disabled TYPE abap_bool,
+ icon_scaling TYPE c LENGTH 1,
+ ui_theme TYPE string,
+ hide_sapgui_hint TYPE abap_bool,
+ activate_wo_popup TYPE abap_bool,
+ label_colors TYPE string,
+ default_git_uname TYPE string,
+ default_git_email TYPE string,
+ END OF ty_s_user_settings .
+ TYPES:
+ BEGIN OF ty_list_settings,
+ filter TYPE string,
+ only_favorites TYPE abap_bool,
+ show_details TYPE abap_bool,
+ order_by TYPE string,
+ order_descending TYPE abap_bool,
+ END OF ty_list_settings.
+
+ TYPES: BEGIN OF ty_flow_settings,
+ only_my_transports TYPE abap_bool,
+ hide_full_matches TYPE abap_bool,
+ hide_matching_files TYPE abap_bool,
+ hide_conflicts TYPE abap_bool,
+ END OF ty_flow_settings.
+
+ METHODS get_changes_only
+ RETURNING
+ VALUE(rv_changes_only) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_default_git_user_email
+ RETURNING
+ VALUE(rv_email) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_default_git_user_name
+ RETURNING
+ VALUE(rv_username) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_diff_unified
+ RETURNING
+ VALUE(rv_diff_unified) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_favorites
+ RETURNING
+ VALUE(rt_favorites) TYPE ty_favorites
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_hide_files
+ RETURNING
+ VALUE(rv_hide) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_show_folders
+ RETURNING
+ VALUE(rv_folders) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_repo_git_user_email
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ RETURNING
+ VALUE(rv_email) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_repo_git_user_name
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ RETURNING
+ VALUE(rv_username) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_repo_last_change_seen
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ RETURNING
+ VALUE(rv_version) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_repo_login
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ RETURNING
+ VALUE(rv_login) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_repo_show
+ RETURNING
+ VALUE(rv_key) TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_favorite_repo
+ IMPORTING
+ !iv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_default_git_user_email
+ IMPORTING
+ !iv_email TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_default_git_user_name
+ IMPORTING
+ !iv_username TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_repo_git_user_email
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ !iv_email TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_repo_git_user_name
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ !iv_username TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_repo_last_change_seen
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ !iv_version TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_repo_login
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ !iv_login TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_repo_show
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ METHODS toggle_changes_only
+ RETURNING
+ VALUE(rv_changes_only) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_order_by
+ RETURNING
+ VALUE(rv_order_by) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS set_order_by
+ IMPORTING
+ iv_order_by TYPE string
+ RETURNING
+ VALUE(rv_order_by) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_order_descending
+ RETURNING
+ VALUE(rv_order_descending) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ METHODS set_order_descending
+ IMPORTING
+ iv_order_descending TYPE abap_bool
+ RETURNING
+ VALUE(rv_order_descending) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_diff_first
+ RETURNING
+ VALUE(rv_diff_first) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ METHODS set_diff_first
+ IMPORTING
+ iv_diff_first TYPE abap_bool
+ RETURNING
+ VALUE(rv_diff_first) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ METHODS toggle_diff_unified
+ RETURNING
+ VALUE(rv_diff_unified) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS toggle_favorite
+ IMPORTING
+ !iv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ METHODS toggle_hide_files
+ RETURNING
+ VALUE(rv_hide) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS toggle_show_folders
+ RETURNING
+ VALUE(rv_folders) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_settings
+ RETURNING
+ VALUE(rs_user_settings) TYPE ty_s_user_settings
+ RAISING
+ zcx_abapgit_exception.
+ METHODS set_settings
+ IMPORTING
+ is_user_settings TYPE ty_s_user_settings
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_list_settings
+ RETURNING
+ VALUE(rs_list_settings) TYPE ty_list_settings
+ RAISING
+ zcx_abapgit_exception.
+ METHODS set_list_settings
+ IMPORTING
+ is_list_settings TYPE ty_list_settings
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_flow_settings
+ RETURNING
+ VALUE(rs_flow_settings) TYPE ty_flow_settings
+ RAISING
+ zcx_abapgit_exception.
+ METHODS set_flow_settings
+ IMPORTING
+ is_flow_settings TYPE ty_flow_settings
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_repo .
+
+ DATA ms_data TYPE zif_abapgit_persistence=>ty_repo READ-ONLY.
+
+ METHODS get_key
+ RETURNING
+ VALUE(rv_key) TYPE zif_abapgit_persistence=>ty_value .
+ METHODS get_name
+ RETURNING
+ VALUE(rv_name) TYPE string.
+ METHODS is_offline
+ RETURNING
+ VALUE(rv_offline) TYPE abap_bool .
+ METHODS get_package
+ RETURNING
+ VALUE(rv_package) TYPE zif_abapgit_persistence=>ty_repo-package .
+ METHODS get_local_settings
+ RETURNING
+ VALUE(rs_settings) TYPE zif_abapgit_persistence=>ty_repo-local_settings .
+
+ METHODS get_tadir_objects
+ RETURNING
+ VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_files_local_filtered
+ IMPORTING
+ !ii_obj_filter TYPE REF TO zif_abapgit_object_filter
+ !ii_log TYPE REF TO zif_abapgit_log OPTIONAL
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_files_local
+ IMPORTING
+ !ii_log TYPE REF TO zif_abapgit_log OPTIONAL
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_files_remote
+ IMPORTING
+ !ii_obj_filter TYPE REF TO zif_abapgit_object_filter OPTIONAL
+ !iv_ignore_files TYPE abap_bool DEFAULT abap_false
+ PREFERRED PARAMETER ii_obj_filter
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS refresh
+ IMPORTING
+ !iv_drop_cache TYPE abap_bool DEFAULT abap_false
+ !iv_drop_log TYPE abap_bool DEFAULT abap_true
+ PREFERRED PARAMETER iv_drop_cache
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_dot_abapgit
+ RETURNING
+ VALUE(ro_dot_abapgit) TYPE REF TO zcl_abapgit_dot_abapgit .
+ METHODS set_dot_abapgit
+ IMPORTING
+ !io_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit
+ RAISING
+ zcx_abapgit_exception .
+ METHODS find_remote_dot_abapgit
+ RETURNING
+ VALUE(ro_dot) TYPE REF TO zcl_abapgit_dot_abapgit
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize
+ IMPORTING
+ !is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ !ii_log TYPE REF TO zif_abapgit_log
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_checks
+ RETURNING
+ VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS checksums
+ RETURNING
+ VALUE(ri_checksums) TYPE REF TO zif_abapgit_repo_checksums
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS has_remote_source
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+ METHODS get_log
+ RETURNING
+ VALUE(ri_log) TYPE REF TO zif_abapgit_log .
+ METHODS create_new_log
+ IMPORTING
+ iv_title TYPE string OPTIONAL
+ RETURNING
+ VALUE(ri_log) TYPE REF TO zif_abapgit_log .
+ METHODS get_dot_apack
+ RETURNING
+ VALUE(ro_dot_apack) TYPE REF TO zcl_abapgit_apack_reader
+ RAISING
+ zcx_abapgit_exception.
+ METHODS delete_checks
+ RETURNING
+ VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_delete_checks
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_files_remote
+ IMPORTING
+ it_files TYPE zif_abapgit_git_definitions=>ty_files_tt .
+ METHODS get_unsupported_objects_local
+ RETURNING
+ VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_items_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_local_settings
+ IMPORTING
+ is_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings
+ RAISING
+ zcx_abapgit_exception .
+ METHODS switch_repo_type
+ IMPORTING
+ iv_offline TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS refresh_local_object
+ IMPORTING
+ iv_obj_type TYPE tadir-object
+ iv_obj_name TYPE tadir-obj_name
+ RAISING
+ zcx_abapgit_exception .
+ METHODS refresh_local_objects
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_data_config
+ RETURNING
+ VALUE(ri_config) TYPE REF TO zif_abapgit_data_config
+ RAISING
+ zcx_abapgit_exception .
+ METHODS bind_listener
+ IMPORTING
+ ii_listener TYPE REF TO zif_abapgit_repo_listener .
+ METHODS remove_ignored_files
+ CHANGING
+ ct_files TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_repo_checksums.
+
+ METHODS get
+ RETURNING
+ VALUE(rt_checksums) TYPE zif_abapgit_persistence=>ty_local_checksum_tt.
+
+ METHODS get_checksums_per_file
+ RETURNING
+ VALUE(rt_checksums) TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt .
+
+ METHODS rebuild
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS update
+ IMPORTING
+ !it_updated_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_repo_listener .
+
+ METHODS on_meta_change
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !is_meta TYPE zif_abapgit_persistence=>ty_repo_xml
+ !is_change_mask TYPE zif_abapgit_persistence=>ty_repo_meta_mask
+ RAISING
+ zcx_abapgit_exception .
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_repo_online.
+
+ INTERFACES zif_abapgit_repo.
+
+ METHODS get_url
+ RETURNING
+ VALUE(rv_url) TYPE zif_abapgit_persistence=>ty_repo-url .
+ METHODS get_selected_branch
+ RETURNING
+ VALUE(rv_name) TYPE zif_abapgit_persistence=>ty_repo-branch_name .
+ METHODS set_url
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ RAISING
+ zcx_abapgit_exception .
+ METHODS select_branch
+ IMPORTING
+ !iv_branch_name TYPE zif_abapgit_persistence=>ty_repo-branch_name
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_selected_commit
+ RETURNING
+ VALUE(rv_selected_commit) TYPE zif_abapgit_persistence=>ty_repo-selected_commit
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_current_remote
+ RETURNING
+ VALUE(rv_sha1) TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ METHODS select_commit
+ IMPORTING
+ !iv_selected_commit TYPE zif_abapgit_persistence=>ty_repo-selected_commit
+ RAISING
+ zcx_abapgit_exception .
+ METHODS switch_origin
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ !iv_branch TYPE zif_abapgit_persistence=>ty_repo-branch_name OPTIONAL
+ !iv_overwrite TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_switched_origin
+ RETURNING
+ VALUE(rv_switched_origin) TYPE zif_abapgit_persistence=>ty_repo-switched_origin.
+ METHODS push
+ IMPORTING
+ !is_comment TYPE zif_abapgit_git_definitions=>ty_comment
+ !io_stage TYPE REF TO zcl_abapgit_stage
+ RAISING
+ zcx_abapgit_exception .
+ METHODS create_branch
+ IMPORTING
+ !iv_name TYPE string
+ !iv_from TYPE zif_abapgit_git_definitions=>ty_sha1 OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS check_for_valid_branch
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_remote_settings
+ RETURNING
+ VALUE(rs_settings) TYPE zif_abapgit_persistence=>ty_remote_settings
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_repo_srv .
+ TYPES:
+ ty_repo_list TYPE STANDARD TABLE OF REF TO zif_abapgit_repo WITH DEFAULT KEY,
+
+ BEGIN OF ty_label,
+ label TYPE string,
+ END OF ty_label,
+ ty_labels TYPE STANDARD TABLE OF ty_label WITH NON-UNIQUE DEFAULT KEY
+ WITH NON-UNIQUE SORTED KEY key_label COMPONENTS label.
+
+ METHODS init.
+ METHODS delete
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_value
+ RETURNING
+ VALUE(ri_repo) TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_repo_installed
+ IMPORTING
+ !iv_url TYPE string
+ !iv_target_package TYPE devclass OPTIONAL
+ RETURNING
+ VALUE(rv_installed) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS list
+ IMPORTING
+ !iv_offline TYPE abap_bool DEFAULT abap_undefined
+ RETURNING
+ VALUE(rt_list) TYPE ty_repo_list
+ RAISING
+ zcx_abapgit_exception .
+ METHODS list_favorites
+ IMPORTING
+ !iv_offline TYPE abap_bool DEFAULT abap_undefined
+ RETURNING
+ VALUE(rt_list) TYPE ty_repo_list
+ RAISING
+ zcx_abapgit_exception .
+ METHODS new_offline
+ IMPORTING
+ !iv_name TYPE string
+ !iv_package TYPE devclass
+ !iv_folder_logic TYPE string DEFAULT zif_abapgit_dot_abapgit=>c_folder_logic-full
+ !iv_labels TYPE string OPTIONAL
+ !iv_ign_subpkg TYPE abap_bool DEFAULT abap_false
+ !iv_main_lang_only TYPE abap_bool DEFAULT abap_false
+ !iv_abap_lang_vers TYPE string OPTIONAL
+ RETURNING
+ VALUE(ri_repo) TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+ METHODS new_online
+ IMPORTING
+ !iv_url TYPE string
+ !iv_branch_name TYPE string OPTIONAL
+ !iv_display_name TYPE string OPTIONAL
+ !iv_name TYPE string OPTIONAL
+ !iv_package TYPE devclass
+ !iv_folder_logic TYPE string DEFAULT zif_abapgit_dot_abapgit=>c_folder_logic-prefix
+ !iv_labels TYPE string OPTIONAL
+ !iv_ign_subpkg TYPE abap_bool DEFAULT abap_false
+ !iv_main_lang_only TYPE abap_bool DEFAULT abap_false
+ !iv_abap_lang_vers TYPE string OPTIONAL
+ RETURNING
+ VALUE(ri_repo) TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+ METHODS purge
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !is_checks TYPE zif_abapgit_definitions=>ty_delete_checks
+ !iv_keep_repo TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_log) TYPE REF TO zif_abapgit_log
+ RAISING
+ zcx_abapgit_exception .
+ METHODS validate_package
+ IMPORTING
+ !iv_package TYPE devclass
+ !iv_ign_subpkg TYPE abap_bool DEFAULT abap_false
+ !iv_chk_exists TYPE abap_bool DEFAULT abap_true
+ RAISING
+ zcx_abapgit_exception .
+ METHODS validate_url
+ IMPORTING
+ !iv_url TYPE string
+ !iv_chk_exists TYPE abap_bool DEFAULT abap_true
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_repo_from_package
+ IMPORTING
+ !iv_package TYPE devclass
+ !iv_ign_subpkg TYPE abap_bool DEFAULT abap_false
+ EXPORTING
+ VALUE(ei_repo) TYPE REF TO zif_abapgit_repo
+ !ev_reason TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_repo_from_url
+ IMPORTING
+ !iv_url TYPE string
+ EXPORTING
+ !ei_repo TYPE REF TO zif_abapgit_repo
+ !ev_reason TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_label_list
+ RETURNING
+ VALUE(rt_labels) TYPE ty_labels
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_flow_logic .
+
+ TYPES:
+ BEGIN OF ty_path_name,
+ path TYPE string,
+ filename TYPE string,
+ remote_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ local_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ END OF ty_path_name.
+ TYPES:
+ ty_path_name_tt TYPE HASHED TABLE OF ty_path_name WITH UNIQUE KEY path filename.
+
+ TYPES: BEGIN OF ty_branch,
+ display_name TYPE string,
+ sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ up_to_date TYPE abap_bool,
+ first_commit TYPE zif_abapgit_git_definitions=>ty_sha1,
+ END OF ty_branch.
+
+ TYPES: BEGIN OF ty_feature,
+ BEGIN OF repo,
+ name TYPE string,
+ key TYPE zif_abapgit_persistence=>ty_repo-key,
+ package TYPE devclass,
+ END OF repo,
+ branch TYPE ty_branch,
+ BEGIN OF pr,
+ title TYPE string,
+ url TYPE string,
+ number TYPE i,
+ draft TYPE abap_bool,
+ END OF pr,
+ BEGIN OF transport,
+ trkorr TYPE trkorr,
+ title TYPE string,
+ END OF transport,
+ full_match TYPE abap_bool,
+ changed_files TYPE ty_path_name_tt,
+ changed_objects TYPE zif_abapgit_definitions=>ty_items_ts,
+ END OF ty_feature.
+ TYPES ty_features TYPE STANDARD TABLE OF ty_feature WITH DEFAULT KEY.
+
+ TYPES: ty_transport_duplicates_tt TYPE STANDARD TABLE OF zif_abapgit_definitions=>ty_item_signature WITH DEFAULT KEY.
+
+ TYPES: BEGIN OF ty_information,
+ features TYPE ty_features,
+ errors TYPE string_table,
+ transport_duplicates TYPE ty_transport_duplicates_tt,
+ END OF ty_information.
+
+ CONSTANTS c_main TYPE string VALUE 'main'.
+
+**************************************
+
+ TYPES: BEGIN OF ty_consolidate,
+ errors TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
+ warnings TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
+ success TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
+ missing_remote TYPE ty_path_name_tt,
+ only_remote TYPE ty_path_name_tt,
+ END OF ty_consolidate.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_flow_exit .
+
+ TYPES: BEGIN OF ty_settings,
+ allow_not_up_to_date TYPE abap_bool,
+ END OF ty_settings.
+
+ METHODS get_settings
+ IMPORTING
+ !iv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RETURNING
+ VALUE(rs_settings) TYPE ty_settings
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS toolbar_extras
+ IMPORTING
+ !io_toolbar TYPE REF TO zcl_abapgit_html_toolbar
+ !is_feature TYPE zif_abapgit_flow_logic=>ty_feature
+ !iv_index TYPE i
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS info_extras
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_feature TYPE zif_abapgit_flow_logic=>ty_feature
+ RAISING
+ zcx_abapgit_exception.
+
+ TYPES: BEGIN OF ty_event_result,
+ handled TYPE zif_abapgit_gui_event_handler=>ty_handling_result,
+ refresh TYPE abap_bool,
+ END OF ty_event_result.
+
+ METHODS on_event
+ IMPORTING
+ ii_event TYPE REF TO zif_abapgit_gui_event
+ it_features TYPE zif_abapgit_flow_logic=>ty_features
+ RETURNING
+ VALUE(rs_result) TYPE ty_event_result
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_gui_diff_extra.
+* only diff rendering, not page related stuff
+
+ METHODS insert_nav
+ RETURNING
+ VALUE(rv_insert_nav) TYPE abap_bool .
+
+* this overrides the default
+ METHODS render_beacon_begin_of_row
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff .
+
+* this overrides the default
+ METHODS render_diff_head_after_state
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff .
+
+* extra rendering before the default
+ METHODS render_line_split_row
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !iv_filename TYPE string
+ !is_diff_line TYPE zif_abapgit_definitions=>ty_diff
+ !iv_index TYPE sy-tabix
+ !iv_fstate TYPE char1
+ !iv_new TYPE string
+ !iv_old TYPE string
+ RAISING
+ zcx_abapgit_exception .
+
+* extra rendering after the default
+ METHODS render_table_head_non_unified
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_services_git.
+
+ TYPES:
+ BEGIN OF ty_commit_fields,
+ repo_key TYPE zif_abapgit_persistence=>ty_repo-key,
+ committer_name TYPE string,
+ committer_email TYPE string,
+ author_name TYPE string,
+ author_email TYPE string,
+ comment TYPE string,
+ body TYPE string,
+ END OF ty_commit_fields.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_popups .
+ TYPES ty_rows TYPE SORTED TABLE OF i WITH UNIQUE KEY table_line.
+
+ TYPES:
+ BEGIN OF ty_alv_column,
+ name TYPE string,
+ text TYPE string,
+ length TYPE lvc_outlen,
+ show_icon TYPE abap_bool,
+ center TYPE abap_bool,
+ END OF ty_alv_column,
+ ty_alv_column_tt TYPE STANDARD TABLE OF ty_alv_column WITH DEFAULT KEY.
+
+ TYPES:
+ BEGIN OF ty_popup_position,
+ start_column LIKE sy-cucol,
+ start_row LIKE sy-curow,
+ end_column LIKE sy-cucol,
+ end_row LIKE sy-curow,
+ END OF ty_popup_position.
+
+ CONSTANTS c_new_branch_label TYPE string VALUE '+ create new ...' ##NO_TEXT.
+
+ METHODS popup_search_help
+ IMPORTING
+ !iv_tab_field TYPE string
+ RETURNING
+ VALUE(rv_value) TYPE ddshretval-fieldval
+ RAISING
+ zcx_abapgit_exception .
+ METHODS popup_folder_logic
+ RETURNING
+ VALUE(rv_folder_logic) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS create_branch_popup
+ IMPORTING
+ !iv_source_branch_name TYPE string
+ EXPORTING
+ !ev_name TYPE string
+ !ev_cancel TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS branch_list_popup
+ IMPORTING
+ !iv_url TYPE string
+ !iv_default_branch TYPE string OPTIONAL
+ !iv_show_new_option TYPE abap_bool OPTIONAL
+ !iv_hide_branch TYPE zif_abapgit_persistence=>ty_repo-branch_name OPTIONAL
+ !iv_hide_head TYPE abap_bool OPTIONAL
+ RETURNING
+ VALUE(rs_branch) TYPE zif_abapgit_git_definitions=>ty_git_branch
+ RAISING
+ zcx_abapgit_exception .
+ METHODS tag_list_popup
+ IMPORTING
+ !iv_url TYPE string
+ RETURNING
+ VALUE(rs_tag) TYPE zif_abapgit_git_definitions=>ty_git_tag
+ RAISING
+ zcx_abapgit_exception .
+ METHODS commit_list_popup
+ IMPORTING
+ !iv_repo_url TYPE string
+ !iv_branch_name TYPE string OPTIONAL
+ RETURNING
+ VALUE(rs_commit) TYPE zif_abapgit_git_definitions=>ty_commit
+ RAISING
+ zcx_abapgit_exception .
+ TYPES ty_char1 TYPE c LENGTH 1.
+ TYPES ty_icon TYPE c LENGTH 30.
+ METHODS popup_to_confirm
+ IMPORTING
+ !iv_titlebar TYPE clike
+ !iv_text_question TYPE clike
+ !iv_text_button_1 TYPE clike DEFAULT 'Yes'
+ !iv_icon_button_1 TYPE ty_icon DEFAULT space
+ !iv_text_button_2 TYPE clike DEFAULT 'No'
+ !iv_icon_button_2 TYPE ty_icon DEFAULT space
+ !iv_default_button TYPE ty_char1 DEFAULT '1'
+ !iv_display_cancel_button TYPE ty_char1 DEFAULT abap_true
+ !iv_popup_type TYPE clike DEFAULT 'ICON_MESSAGE_QUESTION'
+ RETURNING
+ VALUE(rv_answer) TYPE ty_char1
+ RAISING
+ zcx_abapgit_exception .
+ METHODS popup_to_create_transp_branch
+ IMPORTING
+ !iv_trkorr TYPE trkorr
+ RETURNING
+ VALUE(rs_transport_branch) TYPE zif_abapgit_definitions=>ty_transport_to_branch
+ RAISING
+ zcx_abapgit_exception .
+ METHODS popup_to_select_transport
+ RETURNING
+ VALUE(rv_trkorr) TYPE trkorr .
+ METHODS popup_to_select_from_list
+ IMPORTING
+ !it_list TYPE STANDARD TABLE
+ !iv_title TYPE lvc_title DEFAULT space
+ !iv_header_text TYPE csequence DEFAULT space
+ !iv_start_column TYPE i DEFAULT 10
+ !iv_end_column TYPE i DEFAULT 125
+ !iv_start_line TYPE i DEFAULT 10
+ !iv_end_line TYPE i DEFAULT 30
+ !iv_striped_pattern TYPE abap_bool DEFAULT abap_false
+ !iv_optimize_col_width TYPE abap_bool DEFAULT abap_true
+ !iv_selection_mode TYPE salv_de_constant DEFAULT if_salv_c_selection_mode=>multiple
+ !iv_select_column_text TYPE csequence DEFAULT space
+ !it_columns_to_display TYPE ty_alv_column_tt
+ !it_preselected_rows TYPE ty_rows OPTIONAL
+ EXPORTING
+ VALUE(et_list) TYPE STANDARD TABLE
+ RAISING
+ zcx_abapgit_exception .
+ METHODS popup_transport_request
+ IMPORTING
+ !is_transport_type TYPE zif_abapgit_definitions=>ty_transport_type OPTIONAL
+ !iv_use_default_transport TYPE abap_bool DEFAULT abap_false
+ PREFERRED PARAMETER is_transport_type
+ RETURNING
+ VALUE(rv_transport) TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ METHODS popup_select_tr_requests
+ IMPORTING is_selection TYPE trwbo_selection
+ iv_title TYPE trwbo_title
+ iv_username_pattern TYPE any DEFAULT sy-uname
+ RETURNING VALUE(rt_r_trkorr) TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt
+ RAISING zcx_abapgit_exception.
+ METHODS popup_select_wb_tc_tr_and_tsk
+ RETURNING VALUE(rt_r_trkorr) TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt
+ RAISING zcx_abapgit_exception.
+ METHODS popup_to_select_labels
+ IMPORTING iv_labels TYPE string OPTIONAL
+ RETURNING VALUE(rv_labels) TYPE string
+ RAISING zcx_abapgit_exception.
+ METHODS choose_code_insp_check_variant
+ RETURNING VALUE(rv_check_variant) TYPE sci_chkv
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_log .
+
+ CONSTANTS:
+ BEGIN OF c_status,
+ ok TYPE sy-msgty VALUE 'S',
+ error TYPE sy-msgty VALUE 'E',
+ warning TYPE sy-msgty VALUE 'W',
+ END OF c_status.
+
+ CONSTANTS:
+ BEGIN OF c_log_level,
+ empty TYPE i VALUE 0,
+ info TYPE i VALUE 1,
+ warning TYPE i VALUE 2,
+ error TYPE i VALUE 3,
+ END OF c_log_level.
+
+ TYPES:
+ BEGIN OF ty_log_out,
+ type TYPE sy-msgty,
+ id TYPE sy-msgid,
+ number TYPE sy-msgno,
+ text TYPE string,
+ obj_type TYPE tadir-object,
+ obj_name TYPE tadir-obj_name,
+ exception TYPE REF TO cx_root,
+ END OF ty_log_out .
+ TYPES:
+ ty_log_outs TYPE STANDARD TABLE OF ty_log_out
+ WITH NON-UNIQUE DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_msg,
+ text TYPE string,
+ type TYPE sy-msgty,
+ id TYPE sy-msgid,
+ number TYPE sy-msgno,
+ level TYPE i,
+ END OF ty_msg .
+ TYPES:
+ ty_msgs TYPE STANDARD TABLE OF ty_msg
+ WITH NON-UNIQUE DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_item_status_out,
+ item TYPE zif_abapgit_definitions=>ty_item,
+ status TYPE sy-msgty,
+ messages TYPE ty_msgs,
+ END OF ty_item_status_out .
+ TYPES:
+ ty_item_status_outs TYPE SORTED TABLE OF ty_item_status_out
+ WITH UNIQUE KEY item-obj_type item-obj_name .
+
+ METHODS add
+ IMPORTING
+ !iv_msg TYPE csequence
+ !iv_type TYPE sy-msgty DEFAULT 'E'
+ !iv_class TYPE sy-msgid OPTIONAL
+ !iv_number TYPE sy-msgno OPTIONAL
+ !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ !ix_exc TYPE REF TO cx_root OPTIONAL .
+ METHODS add_error
+ IMPORTING
+ !iv_msg TYPE csequence
+ !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL .
+ METHODS add_info
+ IMPORTING
+ !iv_msg TYPE csequence
+ !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL .
+ METHODS add_warning
+ IMPORTING
+ !iv_msg TYPE csequence
+ !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL .
+ METHODS add_success
+ IMPORTING
+ !iv_msg TYPE csequence
+ !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL .
+ METHODS add_exception
+ IMPORTING
+ !ix_exc TYPE REF TO cx_root
+ !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL .
+ METHODS clear .
+ METHODS count
+ RETURNING
+ VALUE(rv_count) TYPE i .
+ METHODS get_messages
+ RETURNING
+ VALUE(rt_msg) TYPE ty_log_outs .
+ METHODS get_item_status
+ RETURNING
+ VALUE(rt_item_status) TYPE ty_item_status_outs .
+ METHODS get_status
+ RETURNING
+ VALUE(rv_status) TYPE sy-msgty .
+ METHODS get_log_level
+ RETURNING
+ VALUE(rv_level) TYPE i .
+ METHODS get_title
+ RETURNING
+ VALUE(rv_title) TYPE string .
+ METHODS set_title
+ IMPORTING
+ !iv_title TYPE csequence
+ RETURNING
+ VALUE(ri_log) TYPE REF TO zif_abapgit_log.
+ METHODS merge_with
+ IMPORTING
+ ii_log TYPE REF TO zif_abapgit_log
+ iv_min_level TYPE i DEFAULT 0
+ RETURNING
+ VALUE(ri_log) TYPE REF TO zif_abapgit_log.
+ METHODS clone
+ RETURNING
+ VALUE(ri_log) TYPE REF TO zif_abapgit_log.
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_xml_input .
+
+ METHODS read
+ IMPORTING
+ !iv_name TYPE clike
+ CHANGING
+ !cg_data TYPE any
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_raw
+ RETURNING
+ VALUE(ri_raw) TYPE REF TO if_ixml_document .
+
+* todo, add read_xml to match add_xml in lcl_xml_output
+ METHODS get_metadata
+ RETURNING
+ VALUE(rs_metadata) TYPE zif_abapgit_definitions=>ty_metadata .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_xml_output .
+
+ METHODS add
+ IMPORTING
+ !iv_name TYPE clike
+ !ig_data TYPE any
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_raw
+ IMPORTING
+ !ii_raw TYPE REF TO if_ixml_element .
+ METHODS add_xml
+ IMPORTING
+ !iv_name TYPE clike
+ !ii_xml TYPE REF TO if_ixml_element .
+ METHODS render
+ IMPORTING
+ !iv_normalize TYPE abap_bool DEFAULT abap_true
+ !is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
+ RETURNING
+ VALUE(rv_xml) TYPE string .
+
+ENDINTERFACE.
+
+INTERFACE zif_abapgit_version .
+
+ CONSTANTS c_xml_version TYPE string VALUE 'v1.0.0' ##NO_TEXT.
+ CONSTANTS c_abap_version TYPE string VALUE '1.132.0' ##NO_TEXT.
+
+ENDINTERFACE.
+
+CLASS zcl_abapgit_apack_helper DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS are_dependencies_met
+ IMPORTING
+ !it_dependencies TYPE zif_abapgit_apack_definitions=>ty_dependencies
+ RETURNING
+ VALUE(rv_status) TYPE zif_abapgit_definitions=>ty_yes_no
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS dependencies_popup
+ IMPORTING
+ !it_dependencies TYPE zif_abapgit_apack_definitions=>ty_dependencies
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS to_file
+ IMPORTING
+ !iv_package TYPE devclass
+ RETURNING
+ VALUE(rs_file) TYPE zif_abapgit_git_definitions=>ty_file
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS get_manifest_implementations
+ RETURNING
+ VALUE(rt_manifest_implementations) TYPE zif_abapgit_apack_definitions=>ty_manifest_declarations.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_dependency_status,
+ met TYPE zif_abapgit_definitions=>ty_yes_no_partial.
+ INCLUDE TYPE zif_abapgit_apack_definitions=>ty_dependency.
+ TYPES: END OF ty_dependency_status .
+ TYPES:
+ ty_dependency_statuses TYPE STANDARD TABLE OF ty_dependency_status WITH NON-UNIQUE DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_color_line,
+ exception(1) TYPE c,
+ color TYPE lvc_t_scol.
+ INCLUDE TYPE ty_dependency_status.
+ TYPES: t_hyperlink TYPE salv_t_int4_column,
+ END OF ty_color_line.
+
+ TYPES: ty_color_tab TYPE STANDARD TABLE OF ty_color_line WITH DEFAULT KEY.
+
+ CLASS-METHODS get_dependencies_met_status
+ IMPORTING
+ !it_dependencies TYPE zif_abapgit_apack_definitions=>ty_dependencies
+ RETURNING
+ VALUE(rt_status) TYPE ty_dependency_statuses
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_installed_packages
+ RETURNING
+ VALUE(rt_packages) TYPE zif_abapgit_apack_definitions=>ty_descriptors
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS show_dependencies_popup
+ IMPORTING
+ !it_dependencies TYPE ty_dependency_statuses
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_color_table
+ IMPORTING
+ !io_alv TYPE REF TO cl_salv_table
+ !it_dependencies TYPE ty_dependency_statuses
+ CHANGING
+ !ct_color_table TYPE ty_color_tab
+ RAISING
+ cx_salv_existing.
+ENDCLASS.
+CLASS zcl_abapgit_apack_migration DEFINITION
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+ CONSTANTS: c_apack_interface_version TYPE i VALUE 1.
+ CLASS-METHODS: run RAISING zcx_abapgit_exception.
+ METHODS: perform_migration RAISING zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS interface_exists
+ RETURNING
+ VALUE(rv_interface_exists) TYPE abap_bool .
+ METHODS interface_valid
+ RETURNING
+ VALUE(rv_interface_valid) TYPE abap_bool .
+ METHODS create_interface
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_interface_source_classic
+ IMPORTING
+ !is_clskey TYPE seoclskey
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_interface_source
+ IMPORTING
+ !is_clskey TYPE seoclskey
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_interface_source
+ RETURNING
+ VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt .
+ METHODS add_intf_source_and_activate
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_apack_reader DEFINITION
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ TYPES ty_package_name TYPE devclass .
+
+ CLASS-METHODS create_instance
+ IMPORTING
+ !iv_package_name TYPE ty_package_name
+ RETURNING
+ VALUE(ro_manifest_reader) TYPE REF TO zcl_abapgit_apack_reader .
+ CLASS-METHODS deserialize
+ IMPORTING
+ !iv_package_name TYPE ty_package_name
+ !iv_xstr TYPE xstring
+ RETURNING
+ VALUE(ro_manifest_reader) TYPE REF TO zcl_abapgit_apack_reader
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_manifest_descriptor
+ RETURNING
+ VALUE(rs_manifest_descriptor) TYPE zif_abapgit_apack_definitions=>ty_descriptor
+ RAISING
+ zcx_abapgit_exception.
+ METHODS set_manifest_descriptor
+ IMPORTING
+ !is_manifest_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor
+ RAISING
+ zcx_abapgit_exception.
+ METHODS copy_manifest_descriptor
+ IMPORTING
+ !io_manifest_provider TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception.
+ METHODS has_manifest
+ RETURNING
+ VALUE(rv_has_manifest) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ METHODS constructor
+ IMPORTING
+ !iv_package_name TYPE ty_package_name .
+ METHODS refresh.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_instance,
+ package TYPE ty_package_name,
+ instance TYPE REF TO zcl_abapgit_apack_reader,
+ END OF ty_instance,
+ ty_instances TYPE HASHED TABLE OF ty_instance WITH UNIQUE KEY package.
+
+ CLASS-DATA gt_instances TYPE ty_instances.
+
+ DATA mv_package_name TYPE ty_package_name .
+ DATA ms_cached_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor .
+ DATA mv_is_cached TYPE abap_bool .
+
+ CLASS-METHODS from_xml
+ IMPORTING
+ iv_xml TYPE string
+ RETURNING
+ VALUE(rs_data) TYPE zif_abapgit_apack_definitions=>ty_descriptor.
+
+ METHODS format_version
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_apack_writer DEFINITION
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create_instance
+ IMPORTING
+ !is_apack_manifest_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor
+ RETURNING
+ VALUE(ro_manifest_writer) TYPE REF TO zcl_abapgit_apack_writer .
+ METHODS serialize
+ RETURNING
+ VALUE(rv_xml) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ IMPORTING
+ !is_apack_manifest_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA ms_manifest_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor .
+ENDCLASS.
+CLASS zcl_abapgit_background DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES: BEGIN OF ty_method,
+ class TYPE seoclsname,
+ description TYPE string,
+ END OF ty_method.
+
+ TYPES: ty_methods TYPE SORTED TABLE OF ty_method WITH UNIQUE KEY class.
+
+ CLASS-METHODS run
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS list_methods
+ RETURNING VALUE(rt_methods) TYPE ty_methods.
+
+ CLASS-METHODS enqueue
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS dequeue.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS c_enq_type TYPE c LENGTH 12 VALUE 'BACKGROUND'.
+ CONSTANTS c_interface TYPE seoclskey VALUE 'ZIF_ABAPGIT_BACKGROUND'.
+ENDCLASS.
+CLASS zcl_abapgit_background_pull DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_background .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_background_push_au DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_background .
+ PROTECTED SECTION.
+
+ DATA mi_log TYPE REF TO zif_abapgit_log .
+
+ METHODS build_comment
+ IMPORTING
+ !is_files TYPE zif_abapgit_definitions=>ty_stage_files
+ RETURNING
+ VALUE(rv_comment) TYPE string .
+ METHODS push_auto
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ RAISING
+ zcx_abapgit_exception .
+ METHODS determine_user_details
+ IMPORTING
+ !iv_changed_by TYPE syuname
+ RETURNING
+ VALUE(rs_user) TYPE zif_abapgit_git_definitions=>ty_git_user .
+ METHODS push_deletions
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ !is_files TYPE zif_abapgit_definitions=>ty_stage_files
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_background_push_fi DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_background .
+ PROTECTED SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_settings,
+ name TYPE string VALUE 'NAME',
+ email TYPE string VALUE 'EMAIL',
+ END OF c_settings .
+ DATA mi_log TYPE REF TO zif_abapgit_log .
+
+ METHODS build_comment
+ IMPORTING
+ !is_files TYPE zif_abapgit_definitions=>ty_stage_files
+ RETURNING
+ VALUE(rv_comment) TYPE string .
+ METHODS push_fixed
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ !iv_name TYPE string
+ !iv_email TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ENDCLASS.
+"! Change transport system API
+CLASS zcl_abapgit_cts_api DEFINITION
+ FINAL
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_factory.
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_cts_api.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_confirm_transp_msgs_called TYPE abap_bool.
+
+ "! Returns the transport request / task the object is currently locked in
+ "! @parameter iv_program_id | Program ID
+ "! @parameter iv_object_type | Object type
+ "! @parameter iv_object_name | Object name
+ "! @parameter rv_transport | Transport request / task
+ "! @raising zcx_abapgit_exception | Object is not locked in a transport
+ METHODS get_current_transport_for_obj
+ IMPORTING
+ !iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object_type TYPE trobjtype
+ !iv_object_name TYPE sobj_name
+ RETURNING
+ VALUE(rv_transport) TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ "! Returns the transport request / task that includes the object (even if not locked)
+ "! @parameter iv_program_id | Program ID
+ "! @parameter iv_object_type | Object type
+ "! @parameter iv_object_name | Object name
+ "! @parameter rv_transport | Transport request / task
+ "! @raising zcx_abapgit_exception | Object is not locked in a transport
+ METHODS get_current_transport_from_db
+ IMPORTING
+ !iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object_type TYPE trobjtype
+ !iv_object_name TYPE sobj_name
+ RETURNING
+ VALUE(rv_transport) TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ "! Check if the object is currently locked in a transport
+ "! @parameter iv_program_id | Program ID
+ "! @parameter iv_object_type | Object type
+ "! @parameter iv_object_name | Object name
+ "! @parameter rv_locked | Object is locked
+ "! @raising zcx_abapgit_exception | Object type is not lockable
+ METHODS is_object_locked_in_transport
+ IMPORTING
+ !iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object_type TYPE trobjtype
+ !iv_object_name TYPE sobj_name
+ RETURNING
+ VALUE(rv_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ "! Check if the object type is lockable
+ "! @parameter iv_program_id | Program ID
+ "! @parameter iv_object_type | Object type
+ "! @parameter rv_lockable | Lockable
+ METHODS is_object_type_lockable
+ IMPORTING
+ !iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object_type TYPE trobjtype
+ RETURNING
+ VALUE(rv_lockable) TYPE abap_bool .
+ "! Check if the object type can be transported
+ "! @parameter iv_program_id | Program ID
+ "! @parameter iv_object_type | Object type
+ "! @parameter rv_transportable | Transportable
+ METHODS is_object_type_transportable
+ IMPORTING
+ !iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object_type TYPE trobjtype
+ RETURNING
+ VALUE(rv_transportable) TYPE abap_bool .
+ENDCLASS.
+CLASS zcl_abapgit_default_transport DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_default_transport.
+
+ METHODS constructor.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mv_is_set_by_abapgit TYPE abap_bool .
+ DATA ms_save TYPE e070use .
+
+ METHODS store.
+ METHODS restore
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_internal
+ IMPORTING
+ !iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ METHODS clear
+ IMPORTING
+ !is_default_task TYPE e070use
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_transport DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+* todo, add interfaces for this class, consider merging zcl_abapgit_transport_mass into this class?
+ CLASS-METHODS zip
+ IMPORTING
+ !iv_show_log_popup TYPE abap_bool DEFAULT abap_true
+ !iv_logic TYPE string OPTIONAL
+ !is_trkorr TYPE trwbo_request_header OPTIONAL
+ RETURNING
+ VALUE(rv_xstr) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS to_tadir
+ IMPORTING
+ !iv_trkorr TYPE trkorr
+ !iv_deleted_objects TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS add_all_objects_to_trans_req
+ IMPORTING
+ iv_key TYPE zif_abapgit_persistence=>ty_value
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+
+ TYPES ty_trkorr_tt TYPE STANDARD TABLE OF trkorr.
+
+ CLASS-METHODS read_requests
+ IMPORTING
+ !it_trkorr TYPE ty_trkorr_tt
+ RETURNING
+ VALUE(rt_requests) TYPE trwbo_requests
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS find_top_package
+ IMPORTING
+ !it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RETURNING
+ VALUE(rv_package) TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS resolve
+ IMPORTING
+ !it_requests TYPE trwbo_requests
+ !iv_deleted_objects TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ CLASS-METHODS collect_all_objects
+ IMPORTING
+ iv_key TYPE zif_abapgit_persistence=>ty_value
+ RETURNING
+ VALUE(rt_objects) TYPE tr_objects
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS show_log
+ IMPORTING
+ it_log TYPE sprot_u_tab
+ iv_title TYPE string.
+ENDCLASS.
+CLASS zcl_abapgit_transport_2_branch DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS create
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ !is_transport_to_branch TYPE zif_abapgit_definitions=>ty_transport_to_branch
+ !it_transport_objects TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+
+ METHODS generate_commit_message
+ IMPORTING
+ !is_transport_to_branch TYPE zif_abapgit_definitions=>ty_transport_to_branch
+ RETURNING
+ VALUE(rs_comment) TYPE zif_abapgit_git_definitions=>ty_comment .
+ METHODS stage_transport_objects
+ IMPORTING
+ !it_transport_objects TYPE zif_abapgit_definitions=>ty_tadir_tt
+ !io_stage TYPE REF TO zcl_abapgit_stage
+ !is_stage_objects TYPE zif_abapgit_definitions=>ty_stage_files
+ !it_object_statuses TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_transport_mass DEFINITION
+ INHERITING FROM zcl_abapgit_transport
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS run .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_transport_objects DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !it_transport_objects TYPE zif_abapgit_definitions=>ty_tadir_tt .
+ METHODS to_stage
+ IMPORTING
+ !io_stage TYPE REF TO zcl_abapgit_stage
+ !is_stage_objects TYPE zif_abapgit_definitions=>ty_stage_files
+ !it_object_statuses TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mt_transport_objects TYPE zif_abapgit_definitions=>ty_tadir_tt .
+ENDCLASS.
+CLASS zcl_abapgit_data_config DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_data_config .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ 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 xstring
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_data_deserializer DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_data_factory .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_data_deserializer .
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ METHODS convert_json_to_itab
+ IMPORTING
+ !is_file TYPE zif_abapgit_git_definitions=>ty_file
+ !ir_data TYPE REF TO data
+ RAISING
+ zcx_abapgit_exception .
+ METHODS preview_database_changes
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ !ir_lc_data TYPE REF TO data
+ !ir_db_data TYPE REF TO data
+ RETURNING
+ VALUE(rs_result) TYPE zif_abapgit_data_deserializer=>ty_result
+ RAISING
+ zcx_abapgit_exception.
+ METHODS write_database_table
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ !ir_del TYPE REF TO data
+ !ir_ins TYPE REF TO data
+ !ir_upd TYPE REF TO data
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_database_table
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ !it_where TYPE string_table
+ RETURNING
+ VALUE(rr_data) TYPE REF TO data
+ RAISING
+ zcx_abapgit_exception .
+ METHODS determine_transport_request
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ iv_transport_type TYPE zif_abapgit_definitions=>ty_transport_type
+ RETURNING
+ VALUE(rv_transport_request) TYPE trkorr.
+
+ METHODS is_table_allowed_to_edit
+ IMPORTING
+ !is_result TYPE zif_abapgit_data_deserializer=>ty_result
+ RETURNING
+ VALUE(rv_allowed_to_edit) TYPE abap_bool.
+
+ METHODS is_table_included_in_repo
+ IMPORTING
+ !iv_package TYPE devclass
+ !iv_tabname TYPE tabname
+ RETURNING
+ VALUE(rv_is_included) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_data_factory DEFINITION
+ CREATE PUBLIC
+ FRIENDS ZCL_abapgit_data_injector .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get_supporter
+ RETURNING
+ VALUE(ri_supporter) TYPE REF TO zif_abapgit_data_supporter .
+ CLASS-METHODS get_serializer
+ RETURNING
+ VALUE(ri_serializer) TYPE REF TO zif_abapgit_data_serializer .
+ CLASS-METHODS get_deserializer
+ RETURNING
+ VALUE(ri_deserializer) TYPE REF TO zif_abapgit_data_deserializer .
+ CLASS-METHODS get_config
+ RETURNING
+ VALUE(ri_config) TYPE REF TO zif_abapgit_data_config .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gi_supporter TYPE REF TO zif_abapgit_data_supporter .
+ CLASS-DATA gi_serializer TYPE REF TO zif_abapgit_data_serializer .
+ CLASS-DATA gi_deserializer TYPE REF TO zif_abapgit_data_deserializer .
+ENDCLASS.
+CLASS zcl_abapgit_data_injector DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS set_supporter
+ IMPORTING
+ !ii_supporter TYPE REF TO zif_abapgit_data_supporter .
+ METHODS set_serializer
+ IMPORTING
+ !ii_serializer TYPE REF TO zif_abapgit_data_serializer .
+ METHODS set_deserializer
+ IMPORTING
+ !ii_deserializer TYPE REF TO zif_abapgit_data_deserializer .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_data_serializer DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_data_factory .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_data_serializer .
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ CONSTANTS c_max_records TYPE i VALUE 20000 ##NO_TEXT.
+
+ METHODS convert_itab_to_json
+ IMPORTING
+ !ir_data TYPE REF TO data
+ !iv_skip_initial TYPE abap_bool
+ RETURNING
+ VALUE(rv_data) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_database_table
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ !it_where TYPE string_table
+ RETURNING
+ VALUE(rr_data) TYPE REF TO data
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_data_supporter DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_data_factory .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_data_supporter.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mt_supported_objects TYPE zif_abapgit_data_supporter=>ty_objects.
+
+ METHODS get_supported_objects.
+
+ENDCLASS.
+CLASS zcl_abapgit_data_utils DEFINITION
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ TYPES ty_names TYPE STANDARD TABLE OF abap_compname WITH DEFAULT KEY .
+ CLASS-METHODS build_table_itab
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rr_data) TYPE REF TO data
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS build_data_filename
+ IMPORTING
+ !is_config TYPE zif_abapgit_data_config=>ty_config
+ RETURNING
+ VALUE(rv_filename) TYPE string.
+ CLASS-METHODS build_config_filename
+ IMPORTING
+ !is_config TYPE zif_abapgit_data_config=>ty_config
+ RETURNING
+ VALUE(rv_filename) TYPE string.
+ CLASS-METHODS jump
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS does_table_exist
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_exists) TYPE abap_bool.
+ CLASS-METHODS is_customizing_table
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_customizing) TYPE abap_bool.
+ CLASS-METHODS is_application_table
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_application) TYPE abap_bool.
+ CLASS-METHODS list_key_fields
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rt_names) TYPE ty_names
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES ty_contflag TYPE c LENGTH 1.
+
+ CLASS-METHODS get_table_contflag
+ IMPORTING
+ !iv_name TYPE csequence
+ RETURNING
+ VALUE(rv_contflag) TYPE ty_contflag.
+
+ENDCLASS.
+CLASS zcl_abapgit_diff3 DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+************************************************************************
+* ABAP Diff3
+*
+* https://github.com/Marc-Bernard-Tools/ABAP-Diff3
+*
+* This is a port of JavaScript (https://github.com/bhousel/node-diff3, MIT license)
+* https://github.com/bhousel/node-diff3/blob/main/index.mjs as of 2021-09-24
+*
+* Copyright 2022 Marc Bernard
+* SPDX-License-Identifier: MIT
+************************************************************************
+
+ PUBLIC SECTION.
+
+ CONSTANTS c_version TYPE string VALUE '1.1.0' ##NEEDED.
+
+ INTERFACES zif_abapgit_diff3.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_result) TYPE REF TO zif_abapgit_diff3.
+
+ CLASS-METHODS convert_to_abap_indices
+ CHANGING
+ !ct_diff_indices TYPE zif_abapgit_diff3=>ty_diff_indices_result_t OPTIONAL.
+
+ PROTECTED SECTION.
+
+ TYPES:
+ ty_ab TYPE c LENGTH 1.
+
+ TYPES:
+ BEGIN OF ty_hunk,
+ ab TYPE ty_ab,
+ o_start TYPE zif_abapgit_diff3=>ty_number,
+ o_length TYPE zif_abapgit_diff3=>ty_number,
+ ab_start TYPE zif_abapgit_diff3=>ty_number,
+ ab_length TYPE zif_abapgit_diff3=>ty_number,
+ END OF ty_hunk.
+ TYPES:
+ ty_hunks TYPE STANDARD TABLE OF ty_hunk WITH DEFAULT KEY.
+
+ METHODS process_common
+ CHANGING
+ !ct_common TYPE string_table
+ !ct_result TYPE zif_abapgit_diff3=>ty_comm_result_t.
+
+ METHODS chunk_description
+ IMPORTING
+ !it_buffer TYPE string_table
+ !iv_offset TYPE zif_abapgit_diff3=>ty_number
+ !iv_length TYPE zif_abapgit_diff3=>ty_number
+ RETURNING
+ VALUE(rs_result) TYPE zif_abapgit_diff3=>ty_chunk.
+
+ METHODS add_hunk
+ IMPORTING
+ !it_buffer TYPE zif_abapgit_diff3=>ty_diff_indices_result_t
+ !iv_ab TYPE ty_ab
+ CHANGING
+ !ct_hunks TYPE ty_hunks.
+
+ METHODS advance_to
+ IMPORTING
+ !iv_end_offset TYPE zif_abapgit_diff3=>ty_number
+ !it_o TYPE string_table
+ CHANGING
+ !cv_curr_offset TYPE zif_abapgit_diff3=>ty_number
+ !ct_results TYPE zif_abapgit_diff3=>ty_region_t.
+
+ METHODS flush_ok
+ CHANGING
+ !ct_buffer TYPE string_table
+ !ct_result TYPE zif_abapgit_diff3=>ty_merge_region_t.
+
+ METHODS get_labels
+ IMPORTING
+ !is_labels TYPE zif_abapgit_diff3=>ty_labels
+ RETURNING
+ VALUE(rs_labels) TYPE zif_abapgit_diff3=>ty_labels.
+
+ PRIVATE SECTION.
+
+ METHODS _reverse
+ IMPORTING
+ !it_data TYPE string_table
+ RETURNING
+ VALUE(rt_result) TYPE string_table.
+
+ METHODS _slice
+ IMPORTING
+ !it_data TYPE string_table
+ !iv_start TYPE i
+ !iv_end TYPE i
+ RETURNING
+ VALUE(rt_result) TYPE string_table.
+
+ENDCLASS.
+CLASS zcl_abapgit_diff DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_diff_factory .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_diff.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ CONSTANTS c_starting_beacon TYPE i VALUE 1.
+
+ TYPES:
+ ty_regexset_tt TYPE STANDARD TABLE OF REF TO cl_abap_regex WITH KEY table_line.
+
+ DATA mt_beacons TYPE zif_abapgit_definitions=>ty_string_tt.
+ DATA mt_diff TYPE zif_abapgit_definitions=>ty_diffs_tt.
+ DATA ms_stats TYPE zif_abapgit_definitions=>ty_count.
+
+ METHODS map_beacons.
+ METHODS shortlist.
+ METHODS create_regex_set
+ RETURNING
+ VALUE(rt_regex_set) TYPE ty_regexset_tt.
+
+ METHODS calculate_stats.
+
+ENDCLASS.
+CLASS zcl_abapgit_diff_diff3 DEFINITION.
+ PUBLIC SECTION.
+ CLASS-METHODS compute
+ IMPORTING
+ iv_new TYPE xstring
+ iv_old TYPE xstring
+ " todo
+ " iv_ignore_indentation TYPE abap_bool
+ " iv_ignore_comments TYPE abap_bool
+ " iv_ignore_case TYPE abap_bool
+ RETURNING
+ VALUE(rt_diff) TYPE zif_abapgit_definitions=>ty_diffs_tt
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_diff_factory DEFINITION.
+ PUBLIC SECTION.
+ CLASS-METHODS get
+ RETURNING
+ VALUE(ri_diff) TYPE REF TO zif_abapgit_diff.
+ENDCLASS.
+CLASS zcl_abapgit_diff_std DEFINITION.
+ PUBLIC SECTION.
+ CLASS-METHODS compute
+ IMPORTING
+ iv_new TYPE xstring
+ iv_old TYPE xstring
+ iv_ignore_indentation TYPE abap_bool
+ iv_ignore_comments TYPE abap_bool
+ iv_ignore_case TYPE abap_bool
+ RETURNING
+ VALUE(rt_diff) TYPE zif_abapgit_definitions=>ty_diffs_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+ CLASS-DATA gt_diff TYPE zif_abapgit_definitions=>ty_diffs_tt.
+ CLASS-DATA gv_compare_mode TYPE c LENGTH 1.
+ CLASS-DATA gv_ignore_case TYPE abap_bool.
+
+ CLASS-METHODS unpack
+ IMPORTING
+ !iv_new TYPE xstring
+ !iv_old TYPE xstring
+ EXPORTING
+ !et_new TYPE rswsourcet
+ !et_old TYPE rswsourcet
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS compute_diff
+ IMPORTING
+ !it_new TYPE rswsourcet
+ !it_old TYPE rswsourcet
+ RETURNING
+ VALUE(rt_diff) TYPE zif_abapgit_definitions=>ty_diffs_tt.
+
+ CLASS-METHODS compute_diff_extra
+ IMPORTING
+ !it_new TYPE rswsourcet
+ !it_old TYPE rswsourcet
+ RETURNING
+ VALUE(rt_diff) TYPE zif_abapgit_definitions=>ty_diffs_tt.
+
+ CLASS-METHODS adjust_diff.
+
+ CLASS-METHODS has_line_diff
+ IMPORTING
+ iv_old TYPE string
+ iv_new TYPE string
+ RETURNING
+ VALUE(rv_has_diff) TYPE abap_bool.
+
+ENDCLASS.
+CLASS zcl_abapgit_abap_language_vers DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CONSTANTS:
+ c_any_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version VALUE '*',
+ c_no_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version VALUE '-',
+ c_feature_flag TYPE string VALUE 'ALAV'.
+
+ METHODS constructor
+ IMPORTING
+ !io_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit.
+
+ METHODS get_abap_language_vers_by_objt
+ IMPORTING
+ !iv_object_type TYPE trobjtype
+ !iv_package TYPE devclass
+ RETURNING
+ VALUE(rv_allowed_abap_langu_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
+
+ METHODS get_repo_abap_language_version
+ RETURNING
+ VALUE(rv_abap_language_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
+
+ METHODS is_import_allowed
+ IMPORTING
+ !iv_package TYPE devclass
+ RETURNING
+ VALUE(rv_allowed) TYPE abap_bool.
+
+ CLASS-METHODS check_abap_language_version
+ IMPORTING
+ !iv_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit.
+
+ " Depends on experimental feature flag and repo setting
+ DATA mv_has_abap_language_vers TYPE abap_bool.
+
+ METHODS get_default_abap_language_vers
+ IMPORTING
+ !iv_object_type TYPE trobjtype
+ RETURNING
+ VALUE(rv_abap_language_version) TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version.
+
+ METHODS get_abap_language_vers_by_devc
+ IMPORTING
+ !iv_package TYPE devclass
+ RETURNING
+ VALUE(rv_abap_language_version) TYPE string.
+
+ METHODS get_abap_language_vers_by_repo
+ RETURNING
+ VALUE(rv_abap_language_version) TYPE string.
+
+ CLASS-METHODS get_description
+ IMPORTING
+ !iv_abap_language_version TYPE zif_abapgit_aff_types_v1=>ty_abap_language_version
+ RETURNING
+ VALUE(rv_description) TYPE string.
+
+ENDCLASS.
+CLASS zcl_abapgit_env_factory DEFINITION FRIENDS ZCL_abapgit_env_injector.
+ PUBLIC SECTION.
+ CLASS-METHODS get_user_record
+ RETURNING
+ VALUE(ri_user_record) TYPE REF TO zif_abapgit_user_record.
+
+ PRIVATE SECTION.
+ CLASS-DATA gi_user_record TYPE REF TO zif_abapgit_user_record.
+ENDCLASS.
+CLASS zcl_abapgit_env_injector DEFINITION.
+ PUBLIC SECTION.
+ CLASS-METHODS set_user_record
+ IMPORTING
+ !ii_user_record TYPE REF TO zif_abapgit_user_record.
+ENDCLASS.
+CLASS zcl_abapgit_environment DEFINITION
+ FINAL
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_factory.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_environment.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_cloud TYPE abap_bool VALUE abap_undefined ##NO_TEXT.
+ DATA mv_is_merged TYPE abap_bool VALUE abap_undefined ##NO_TEXT.
+ DATA mv_modifiable TYPE abap_bool VALUE abap_undefined ##NO_TEXT.
+
+ METHODS is_system_changes_allowed
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+ENDCLASS.
+CLASS zcl_abapgit_feature DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ " For dependency injection/testing, use the following
+ " zcl_abapgit_persist_factory=>get_settings( )->read( )->set_experimental_features( )
+
+ CLASS-METHODS is_enabled
+ IMPORTING
+ !iv_feature TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_run) TYPE abap_bool.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_language DEFINITION
+ CREATE PUBLIC .
+
+*----------------------------------------------------------------------*
+* This helper class is used to set and restore the current language.
+* As some of the SAP functions used rely on SY-LANGU containing the
+* main language, this class is used to temporarily change and then
+* restore the value of SY-LANGU.
+*----------------------------------------------------------------------*
+ PUBLIC SECTION.
+
+ CLASS-METHODS class_constructor .
+ CLASS-METHODS restore_login_language .
+ CLASS-METHODS set_current_language
+ IMPORTING
+ !iv_language TYPE sy-langu .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gv_login_language TYPE sy-langu .
+ENDCLASS.
+CLASS zcl_abapgit_settings DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CONSTANTS c_commitmsg_comment_length_dft TYPE i VALUE 50 ##NO_TEXT.
+ CONSTANTS c_commitmsg_body_size_dft TYPE i VALUE 72 ##NO_TEXT.
+ CONSTANTS:
+ BEGIN OF c_icon_scaling,
+ large TYPE c VALUE 'L',
+ small TYPE c VALUE 'S',
+ END OF c_icon_scaling .
+ CONSTANTS:
+ BEGIN OF c_ui_theme,
+ default TYPE string VALUE 'default',
+ dark TYPE string VALUE 'dark',
+ belize TYPE string VALUE 'belize',
+ synced_with_gui TYPE string VALUE 'synced_with_gui',
+ END OF c_ui_theme .
+
+ METHODS set_proxy_url
+ IMPORTING
+ !iv_url TYPE string .
+ METHODS set_proxy_port
+ IMPORTING
+ !iv_port TYPE string .
+ METHODS set_proxy_authentication
+ IMPORTING
+ !iv_auth TYPE abap_bool .
+ METHODS set_proxy_bypass
+ IMPORTING
+ !it_bypass TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url OPTIONAL .
+ METHODS get_proxy_url
+ RETURNING
+ VALUE(rv_proxy_url) TYPE string .
+ METHODS get_proxy_port
+ RETURNING
+ VALUE(rv_port) TYPE string .
+ METHODS get_proxy_authentication
+ RETURNING
+ VALUE(rv_auth) TYPE abap_bool .
+ METHODS get_proxy_bypass
+ RETURNING
+ VALUE(rt_bypass) TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url .
+ METHODS set_run_critical_tests
+ IMPORTING
+ !iv_run TYPE abap_bool .
+ METHODS get_run_critical_tests
+ RETURNING
+ VALUE(rv_run) TYPE abap_bool .
+ METHODS set_experimental_features
+ IMPORTING
+ !iv_features TYPE string.
+ METHODS get_experimental_features
+ RETURNING
+ VALUE(rv_features) TYPE string.
+ METHODS set_max_lines
+ IMPORTING
+ !iv_lines TYPE i .
+ METHODS get_max_lines
+ RETURNING
+ VALUE(rv_lines) TYPE i .
+ METHODS set_adt_jump_enanbled
+ IMPORTING
+ !iv_adt_jump_enabled TYPE abap_bool .
+ METHODS get_adt_jump_enabled
+ RETURNING
+ VALUE(rv_adt_jump_enabled) TYPE abap_bool .
+ METHODS set_commitmsg_comment_length
+ IMPORTING
+ !iv_length TYPE i .
+ METHODS get_commitmsg_comment_length
+ RETURNING
+ VALUE(rv_length) TYPE i .
+ METHODS set_commitmsg_comment_default
+ IMPORTING
+ !iv_default TYPE string .
+ METHODS get_commitmsg_comment_default
+ RETURNING
+ VALUE(rv_default) TYPE string .
+ METHODS set_commitmsg_body_size
+ IMPORTING
+ !iv_length TYPE i .
+ METHODS get_commitmsg_body_size
+ RETURNING
+ VALUE(rv_length) TYPE i .
+ METHODS set_commitmsg_hide_author
+ IMPORTING
+ !iv_hide_author TYPE abap_bool.
+ METHODS get_commitmsg_hide_author
+ RETURNING
+ VALUE(rv_hide_author) TYPE abap_bool.
+ METHODS get_settings_xml
+ RETURNING
+ VALUE(rv_settings_xml) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_user_settings
+ RETURNING
+ VALUE(rs_settings) TYPE zif_abapgit_persist_user=>ty_s_user_settings
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_xml_settings
+ IMPORTING
+ !iv_settings_xml TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_defaults .
+ METHODS set_user_settings
+ IMPORTING
+ !is_user_settings TYPE zif_abapgit_persist_user=>ty_s_user_settings .
+ METHODS get_show_default_repo
+ RETURNING
+ VALUE(rv_show_default_repo) TYPE abap_bool .
+ METHODS set_show_default_repo
+ IMPORTING
+ !iv_show_default_repo TYPE abap_bool .
+ METHODS set_link_hints_enabled
+ IMPORTING
+ !iv_link_hints_enabled TYPE abap_bool .
+ METHODS get_link_hints_enabled
+ RETURNING
+ VALUE(rv_link_hints_enabled) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_link_hint_key
+ IMPORTING
+ !iv_link_hint_key TYPE string .
+ METHODS get_link_hint_key
+ RETURNING
+ VALUE(rv_link_hint_key) TYPE string .
+ METHODS set_parallel_proc_disabled
+ IMPORTING
+ !iv_disable_parallel_proc TYPE abap_bool .
+ METHODS get_parallel_proc_disabled
+ RETURNING
+ VALUE(rv_disable_parallel_proc) TYPE abap_bool .
+ METHODS get_icon_scaling
+ RETURNING
+ VALUE(rv_scaling) TYPE zif_abapgit_persist_user=>ty_s_user_settings-icon_scaling .
+ METHODS set_icon_scaling
+ IMPORTING
+ !iv_scaling TYPE zif_abapgit_persist_user=>ty_s_user_settings-icon_scaling .
+ METHODS get_ui_theme
+ IMPORTING
+ !iv_resolve_synced TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rv_ui_theme) TYPE zif_abapgit_persist_user=>ty_s_user_settings-ui_theme .
+ METHODS set_ui_theme
+ IMPORTING
+ !iv_ui_theme TYPE zif_abapgit_persist_user=>ty_s_user_settings-ui_theme .
+ METHODS get_activate_wo_popup
+ RETURNING
+ VALUE(rv_act_wo_popup) TYPE zif_abapgit_persist_user=>ty_s_user_settings-activate_wo_popup .
+ METHODS set_activate_wo_popup
+ IMPORTING
+ !iv_act_wo_popup TYPE zif_abapgit_persist_user=>ty_s_user_settings-activate_wo_popup .
+ METHODS set_default_git_uname
+ IMPORTING
+ !iv_default_git_uname TYPE string.
+ METHODS get_default_git_uname
+ RETURNING
+ VALUE(rv_default_git_uname) TYPE string.
+ METHODS set_default_git_email
+ IMPORTING
+ !iv_default_git_email TYPE string.
+ METHODS get_default_git_email
+ RETURNING
+ VALUE(rv_default_git_email) TYPE string.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_s_settings,
+ proxy_url TYPE string,
+ proxy_port TYPE string,
+ proxy_auth TYPE string,
+ proxy_bypass TYPE zif_abapgit_definitions=>ty_range_proxy_bypass_url,
+ run_critical_tests TYPE abap_bool,
+ experimental_features TYPE string,
+ commitmsg_comment_length TYPE i,
+ commitmsg_comment_deflt TYPE string,
+ commitmsg_body_size TYPE i,
+ commitmsg_hide_author TYPE abap_bool,
+ END OF ty_s_settings.
+
+ DATA: ms_settings TYPE ty_s_settings,
+ ms_user_settings TYPE zif_abapgit_persist_user=>ty_s_user_settings.
+
+ METHODS:
+ set_default_link_hint_key.
+
+ENDCLASS.
+CLASS zcl_abapgit_user_record DEFINITION
+ FINAL
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_env_factory.
+
+ PUBLIC SECTION.
+ CLASS-METHODS reset.
+
+ INTERFACES zif_abapgit_user_record.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_user,
+ user TYPE sy-uname,
+ name TYPE string,
+ email TYPE string,
+ END OF ty_user.
+
+ CLASS-DATA gt_user TYPE HASHED TABLE OF ty_user WITH UNIQUE KEY user.
+
+ CLASS-METHODS check_user_exists
+ IMPORTING
+ iv_user TYPE sy-uname
+ EXPORTING
+ ev_fullname TYPE string
+ ev_email TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS get_user_dtls_from_other_clnt
+ IMPORTING
+ iv_user TYPE sy-uname
+ RETURNING
+ VALUE(rs_user) TYPE ty_user.
+
+ CLASS-METHODS build_cache
+ IMPORTING
+ iv_user TYPE sy-uname
+ RETURNING
+ VALUE(rs_user) TYPE ty_user.
+
+ CLASS-METHODS read_cache
+ IMPORTING
+ iv_user TYPE sy-uname
+ RETURNING
+ VALUE(rs_user) TYPE ty_user.
+ENDCLASS.
+CLASS zcl_abapgit_auth DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS is_allowed
+ IMPORTING
+ !iv_authorization TYPE zif_abapgit_auth=>ty_authorization
+ !iv_param TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_allowed) TYPE abap_bool .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_exit DEFINITION
+ CREATE PUBLIC
+ .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_exit.
+
+ CLASS-METHODS get_instance
+ RETURNING
+ VALUE(ri_exit) TYPE REF TO zif_abapgit_exit.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gi_global_exit TYPE REF TO zif_abapgit_exit.
+ CLASS-DATA gi_exit TYPE REF TO zif_abapgit_exit.
+
+ CLASS-METHODS is_running_in_test_context
+ RETURNING
+ VALUE(rv_running_in_test_context) TYPE abap_bool.
+
+ENDCLASS.
+CLASS zcl_abapgit_gitv2_porcelain DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_git_factory .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gitv2_porcelain.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS:
+ BEGIN OF c_service,
+ receive TYPE string VALUE 'receive', "#EC NOTEXT
+ upload TYPE string VALUE 'upload', "#EC NOTEXT
+ END OF c_service .
+
+ CONSTANTS c_flush_pkt TYPE c LENGTH 4 VALUE '0000'.
+ CONSTANTS c_delim_pkt TYPE c LENGTH 4 VALUE '0001'.
+
+ CLASS-METHODS get_request_uri
+ IMPORTING
+ iv_url TYPE string
+ iv_service TYPE string
+ RETURNING
+ VALUE(rv_uri) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS send_command
+ IMPORTING
+ iv_url TYPE string
+ iv_service TYPE string
+ iv_command TYPE string
+ it_arguments TYPE string_table OPTIONAL
+ RETURNING
+ VALUE(rv_response) TYPE xstring
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS decode_pack
+ IMPORTING
+ iv_xstring TYPE xstring
+ RETURNING
+ VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_git_add_patch DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ METHODS:
+ constructor
+ IMPORTING
+ it_diff TYPE zif_abapgit_definitions=>ty_diffs_tt,
+
+ get_patch
+ RETURNING
+ VALUE(rt_patch) TYPE string_table
+ RAISING
+ zcx_abapgit_exception,
+
+ get_patch_binary
+ RETURNING
+ VALUE(rv_patch_binary) TYPE xstring
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA:
+ mt_diff TYPE zif_abapgit_definitions=>ty_diffs_tt,
+ mt_patch TYPE string_table.
+
+ METHODS:
+ calculate_patch
+ RETURNING
+ VALUE(rt_patch) TYPE string_table
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_git_branch_list DEFINITION
+ CREATE PUBLIC FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_git_branch_list.
+
+ METHODS constructor
+ IMPORTING
+ !iv_data TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mt_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt .
+ DATA mv_head_symref TYPE string .
+
+ CLASS-METHODS skip_first_pkt
+ IMPORTING
+ !iv_data TYPE string
+ RETURNING
+ VALUE(rv_data) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS find_tag_by_name
+ IMPORTING
+ !iv_branch_name TYPE string
+ RETURNING
+ VALUE(rs_branch) TYPE zif_abapgit_git_definitions=>ty_git_branch
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS parse_branch_list
+ IMPORTING
+ !iv_data TYPE string
+ EXPORTING
+ !et_list TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
+ !ev_head_symref TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS parse_head_params
+ IMPORTING
+ !iv_data TYPE string
+ RETURNING
+ VALUE(rv_head_symref) TYPE string .
+ENDCLASS.
+CLASS zcl_abapgit_git_branch_utils DEFINITION.
+ PUBLIC SECTION.
+
+ CLASS-METHODS get_display_name
+ IMPORTING
+ !iv_branch_name TYPE clike
+ RETURNING
+ VALUE(rv_display_name) TYPE string .
+ CLASS-METHODS get_type
+ IMPORTING
+ !iv_branch_name TYPE clike
+ !it_result TYPE string_table OPTIONAL
+ !iv_current_row_index TYPE sy-tabix OPTIONAL
+ RETURNING
+ VALUE(rv_type) TYPE zif_abapgit_git_definitions=>ty_git_branch_type .
+ CLASS-METHODS get_description
+ IMPORTING
+ !iv_branch_name TYPE clike
+ RETURNING
+ VALUE(rv_description) TYPE string.
+ CLASS-METHODS complete_heads_branch_name
+ IMPORTING
+ !iv_branch_name TYPE clike
+ RETURNING
+ VALUE(rv_name) TYPE string .
+ CLASS-METHODS normalize_branch_name
+ IMPORTING
+ !iv_branch_name TYPE clike
+ RETURNING
+ VALUE(rv_name) TYPE string .
+ENDCLASS.
+CLASS zcl_abapgit_git_commit DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ TYPES:
+ BEGIN OF ty_pull_result,
+ commits TYPE zif_abapgit_git_definitions=>ty_commit_tt,
+ commit TYPE zif_abapgit_git_definitions=>ty_sha1,
+ END OF ty_pull_result .
+
+ CLASS-METHODS get_by_branch
+ IMPORTING
+ !iv_branch_name TYPE string
+ !iv_repo_url TYPE string
+ !iv_deepen_level TYPE i
+ !iv_sorted TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rs_pull_result) TYPE ty_pull_result
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_by_commit
+ IMPORTING
+ !iv_commit_hash TYPE zif_abapgit_git_definitions=>ty_sha1
+ !iv_repo_url TYPE string
+ !iv_deepen_level TYPE i
+ RETURNING
+ VALUE(rt_commits) TYPE zif_abapgit_git_definitions=>ty_commit_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS parse_commits
+ IMPORTING
+ !it_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ RETURNING
+ VALUE(rt_commits) TYPE zif_abapgit_git_definitions=>ty_commit_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS sort_commits
+ CHANGING
+ !ct_commits TYPE zif_abapgit_git_definitions=>ty_commit_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS reverse_sort_order
+ CHANGING
+ !ct_commits TYPE zif_abapgit_git_definitions=>ty_commit_tt .
+ CLASS-METHODS clear_missing_parents CHANGING ct_commits TYPE zif_abapgit_git_definitions=>ty_commit_tt .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: ty_sha1_range TYPE RANGE OF zif_abapgit_git_definitions=>ty_sha1 .
+
+ CLASS-METHODS get_1st_child_commit
+ IMPORTING
+ it_commit_sha1s TYPE ty_sha1_range
+ EXPORTING
+ et_commit_sha1s TYPE ty_sha1_range
+ es_1st_commit TYPE zif_abapgit_git_definitions=>ty_commit
+ CHANGING
+ ct_commits TYPE zif_abapgit_git_definitions=>ty_commit_tt .
+
+ CLASS-METHODS is_missing
+ IMPORTING
+ it_commits TYPE zif_abapgit_git_definitions=>ty_commit_tt
+ iv_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+
+ CLASS-METHODS extract_author_data
+ IMPORTING
+ !iv_author TYPE string
+ EXPORTING
+ !ev_author TYPE zif_abapgit_git_definitions=>ty_commit-author
+ !ev_email TYPE zif_abapgit_git_definitions=>ty_commit-email
+ !ev_time TYPE zif_abapgit_git_definitions=>ty_commit-time
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS kHGwlatytwTSETnzZMKotffscEwAXR DEFINITION DEFERRED.
+* renamed: zcl_abapgit_git_delta :: lcl_stream
+CLASS kHGwlatytwTSETnzZMKotffscEwAXR DEFINITION FINAL.
+ PUBLIC SECTION.
+ TYPES: ty_hex TYPE x LENGTH 1.
+
+ METHODS:
+ constructor
+ IMPORTING
+ iv_data TYPE xstring,
+ eat_byte
+ RETURNING VALUE(rv_x) TYPE ty_hex,
+ eat_bytes
+ IMPORTING
+ iv_length TYPE i
+ RETURNING
+ VALUE(rv_x) TYPE xstring.
+
+ METHODS has_data
+ RETURNING
+ VALUE(rv_data) TYPE abap_bool.
+
+ PRIVATE SECTION.
+ DATA mv_data TYPE xstring.
+ DATA mv_position TYPE i.
+ DATA mv_length TYPE i.
+ENDCLASS.
+
+CLASS zcl_abapgit_git_delta DEFINITION.
+ PUBLIC SECTION.
+
+ CLASS-METHODS decode_deltas
+ IMPORTING
+ iv_show_progress TYPE abap_bool DEFAULT abap_true
+ CHANGING
+ !ct_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ PRIVATE SECTION.
+ CLASS-METHODS delta
+ IMPORTING
+ !is_object TYPE zif_abapgit_definitions=>ty_object
+ CHANGING
+ !ct_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS delta_header
+ IMPORTING
+ !io_stream TYPE REF TO kHGwlatytwTSETnzZMKotffscEwAXR.
+
+ENDCLASS.
+CLASS zcl_abapgit_git_factory DEFINITION
+ FINAL
+ CREATE PRIVATE
+ .
+
+ PUBLIC SECTION.
+ CLASS-METHODS:
+ get_v2_porcelain
+ RETURNING VALUE(ri_v2) TYPE REF TO zif_abapgit_gitv2_porcelain,
+
+ get_git_transport
+ RETURNING
+ VALUE(ri_git_transport) TYPE REF TO zif_abapgit_git_transport.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CLASS-DATA:
+ gi_git_transport TYPE REF TO zif_abapgit_git_transport.
+ CLASS-DATA:
+ gi_v2 TYPE REF TO zif_abapgit_gitv2_porcelain.
+
+ENDCLASS.
+CLASS zcl_abapgit_git_pack DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ TYPES:
+ BEGIN OF ty_node,
+ chmod TYPE zif_abapgit_git_definitions=>ty_chmod,
+ name TYPE string,
+ sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ END OF ty_node .
+ TYPES:
+ ty_nodes_tt TYPE STANDARD TABLE OF ty_node WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_commit,
+ tree TYPE zif_abapgit_git_definitions=>ty_sha1,
+ parent TYPE zif_abapgit_git_definitions=>ty_sha1,
+ parent2 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ author TYPE string,
+ committer TYPE string,
+ gpgsig TYPE string,
+ body TYPE string,
+ END OF ty_commit .
+ TYPES:
+ BEGIN OF ty_tag,
+ object TYPE string,
+ type TYPE string,
+ tag TYPE string,
+ tagger_name TYPE string,
+ tagger_email TYPE string,
+ message TYPE string,
+ body TYPE string,
+ END OF ty_tag .
+
+ CLASS-METHODS decode
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS decode_tree
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rt_nodes) TYPE ty_nodes_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS decode_commit
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rs_commit) TYPE ty_commit
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS decode_tag
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rs_tag) TYPE ty_tag
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS encode
+ IMPORTING
+ !it_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ RETURNING
+ VALUE(rv_data) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS encode_tree
+ IMPORTING
+ !it_nodes TYPE ty_nodes_tt
+ RETURNING
+ VALUE(rv_data) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS encode_commit
+ IMPORTING
+ !is_commit TYPE ty_commit
+ RETURNING
+ VALUE(rv_data) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS encode_tag
+ IMPORTING
+ !is_tag TYPE ty_tag
+ RETURNING
+ VALUE(rv_data) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ c_pack_start TYPE x LENGTH 4 VALUE '5041434B' ##NO_TEXT.
+ CONSTANTS:
+ c_zlib TYPE x LENGTH 2 VALUE '789C' ##NO_TEXT.
+ CONSTANTS:
+ c_zlib_hmm TYPE x LENGTH 2 VALUE '7801' ##NO_TEXT.
+ CONSTANTS: " PACK
+ c_version TYPE x LENGTH 4 VALUE '00000002' ##NO_TEXT.
+
+ CLASS-METHODS sort_tree
+ IMPORTING
+ !it_nodes TYPE ty_nodes_tt
+ RETURNING
+ VALUE(rt_nodes) TYPE ty_nodes_tt .
+ CLASS-METHODS get_type
+ IMPORTING
+ !iv_x TYPE x
+ RETURNING
+ VALUE(rv_type) TYPE zif_abapgit_git_definitions=>ty_type
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_length
+ EXPORTING
+ !ev_length TYPE i
+ CHANGING
+ !cv_data TYPE xstring .
+ CLASS-METHODS type_and_length
+ IMPORTING
+ !iv_type TYPE zif_abapgit_git_definitions=>ty_type
+ !iv_length TYPE i
+ RETURNING
+ VALUE(rv_xstring) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS zlib_decompress
+ CHANGING
+ !cv_data TYPE xstring
+ !cv_decompressed TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_git_porcelain DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_pull_result,
+ files TYPE zif_abapgit_git_definitions=>ty_files_tt,
+ objects TYPE zif_abapgit_definitions=>ty_objects_tt,
+ commit TYPE zif_abapgit_git_definitions=>ty_sha1,
+ END OF ty_pull_result .
+ TYPES:
+ BEGIN OF ty_push_result,
+ new_files TYPE zif_abapgit_git_definitions=>ty_files_tt,
+ branch TYPE zif_abapgit_git_definitions=>ty_sha1,
+ updated_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt,
+ new_objects TYPE zif_abapgit_definitions=>ty_objects_tt,
+ END OF ty_push_result .
+
+ CLASS-METHODS pull_by_branch
+ IMPORTING
+ !iv_url TYPE string
+ !iv_branch_name TYPE string
+ !iv_deepen_level TYPE i DEFAULT 1
+ RETURNING
+ VALUE(rs_result) TYPE ty_pull_result
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS pull_by_commit
+ IMPORTING
+ !iv_url TYPE string
+ !iv_commit_hash TYPE zif_abapgit_git_definitions=>ty_sha1
+ !iv_deepen_level TYPE i DEFAULT 1
+ RETURNING
+ VALUE(rs_result) TYPE ty_pull_result
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS push
+ IMPORTING
+ !is_comment TYPE zif_abapgit_git_definitions=>ty_comment
+ !io_stage TYPE REF TO zcl_abapgit_stage
+ !it_old_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ !iv_parent TYPE zif_abapgit_git_definitions=>ty_sha1
+ !iv_url TYPE string
+ !iv_branch_name TYPE string
+ RETURNING
+ VALUE(rs_result) TYPE ty_push_result
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS create_branch
+ IMPORTING
+ !iv_url TYPE string
+ !iv_name TYPE csequence
+ !iv_from TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS create_tag
+ IMPORTING
+ !iv_url TYPE string
+ !is_tag TYPE zif_abapgit_git_definitions=>ty_git_tag
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS delete_branch
+ IMPORTING
+ !iv_url TYPE string
+ !is_branch TYPE zif_abapgit_git_definitions=>ty_git_branch
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS delete_tag
+ IMPORTING
+ !iv_url TYPE string
+ !is_tag TYPE zif_abapgit_git_definitions=>ty_git_tag
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS full_tree
+ IMPORTING
+ !it_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ !iv_parent TYPE zif_abapgit_git_definitions=>ty_sha1
+ RETURNING
+ VALUE(rt_expanded) TYPE zif_abapgit_git_definitions=>ty_expanded_tt
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_tree,
+ path TYPE string,
+ data TYPE xstring,
+ sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ END OF ty_tree .
+ TYPES:
+ ty_trees_tt TYPE STANDARD TABLE OF ty_tree WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_folder,
+ path TYPE string,
+ count TYPE i,
+ sha1 TYPE zif_abapgit_git_definitions=>ty_sha1,
+ END OF ty_folder .
+ TYPES:
+ ty_folders_tt TYPE STANDARD TABLE OF ty_folder WITH DEFAULT KEY .
+
+ CONSTANTS c_zero TYPE zif_abapgit_git_definitions=>ty_sha1
+ VALUE '0000000000000000000000000000000000000000' ##NO_TEXT.
+
+ CLASS-METHODS build_trees
+ IMPORTING
+ !it_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
+ RETURNING
+ VALUE(rt_trees) TYPE ty_trees_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS find_folders
+ IMPORTING
+ !it_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
+ RETURNING
+ VALUE(rt_folders) TYPE ty_folders_tt .
+ CLASS-METHODS pull
+ IMPORTING
+ !iv_commit TYPE zif_abapgit_git_definitions=>ty_sha1
+ !it_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS walk
+ IMPORTING
+ !it_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ !iv_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1
+ !iv_path TYPE string
+ CHANGING
+ !ct_files TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS walk_tree
+ IMPORTING
+ !it_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ !iv_tree TYPE zif_abapgit_git_definitions=>ty_sha1
+ !iv_base TYPE string
+ RETURNING
+ VALUE(rt_expanded) TYPE zif_abapgit_git_definitions=>ty_expanded_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS receive_pack_push
+ IMPORTING
+ !is_comment TYPE zif_abapgit_git_definitions=>ty_comment
+ !it_trees TYPE ty_trees_tt
+ !it_blobs TYPE zif_abapgit_git_definitions=>ty_files_tt
+ !iv_parent TYPE zif_abapgit_git_definitions=>ty_sha1
+ !iv_parent2 TYPE zif_abapgit_git_definitions=>ty_sha1 OPTIONAL
+ !iv_url TYPE string
+ !iv_branch_name TYPE string
+ EXPORTING
+ !ev_new_commit TYPE zif_abapgit_git_definitions=>ty_sha1
+ !et_new_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ !ev_new_tree TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS create_annotated_tag
+ IMPORTING
+ !is_tag TYPE zif_abapgit_git_definitions=>ty_git_tag
+ !iv_url TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS create_lightweight_tag
+ IMPORTING
+ is_tag TYPE zif_abapgit_git_definitions=>ty_git_tag
+ iv_url TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS delete_annotated_tag
+ IMPORTING
+ !iv_url TYPE string
+ !is_tag TYPE zif_abapgit_git_definitions=>ty_git_tag
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS delete_lightweight_tag
+ IMPORTING
+ !iv_url TYPE string
+ !is_tag TYPE zif_abapgit_git_definitions=>ty_git_tag
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS empty_packfile
+ RETURNING
+ VALUE(rv_pack) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_git_tag DEFINITION
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS add_tag_prefix
+ IMPORTING
+ !iv_text TYPE csequence
+ RETURNING
+ VALUE(rv_text) TYPE string.
+
+ CLASS-METHODS remove_tag_prefix
+ IMPORTING
+ !iv_text TYPE string
+ RETURNING
+ VALUE(rv_text) TYPE string.
+
+ CLASS-METHODS add_peel
+ IMPORTING
+ !iv_text TYPE string
+ RETURNING
+ VALUE(rv_text) TYPE string.
+
+ CLASS-METHODS remove_peel
+ IMPORTING
+ !iv_text TYPE string
+ RETURNING
+ VALUE(rv_text) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_git_time DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES:
+ ty_unixtime TYPE c LENGTH 16 .
+
+ CLASS-METHODS get_unix
+ RETURNING
+ VALUE(rv_time) TYPE ty_unixtime
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS get_one_year_ago
+ RETURNING
+ VALUE(rv_time) TYPE i
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS get_utc
+ IMPORTING
+ !iv_unix TYPE ty_unixtime
+ EXPORTING
+ !ev_date TYPE sy-datum
+ !ev_time TYPE sy-uzeit .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_git_transport DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_git_transport.
+
+* remote to local
+ CLASS-METHODS upload_pack_by_branch
+ IMPORTING
+ !iv_url TYPE string
+ !iv_branch_name TYPE string
+ !iv_deepen_level TYPE i DEFAULT 1
+ !it_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt OPTIONAL
+ EXPORTING
+ !et_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ !ev_branch TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS upload_pack_by_commit
+ IMPORTING
+ !iv_url TYPE string
+ !iv_hash TYPE zif_abapgit_git_definitions=>ty_sha1 OPTIONAL
+ !iv_deepen_level TYPE i DEFAULT 0
+ EXPORTING
+ !et_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ !ev_commit TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+* local to remote
+ CLASS-METHODS receive_pack
+ IMPORTING
+ !iv_url TYPE string
+ !iv_old TYPE zif_abapgit_git_definitions=>ty_sha1
+ !iv_new TYPE zif_abapgit_git_definitions=>ty_sha1
+ !iv_branch_name TYPE string
+ !iv_pack TYPE xstring OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS branches
+ IMPORTING
+ iv_url TYPE string
+ RETURNING
+ VALUE(ri_branch_list) TYPE REF TO zif_abapgit_git_branch_list
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_service,
+ receive TYPE string VALUE 'receive', "#EC NOTEXT
+ upload TYPE string VALUE 'upload', "#EC NOTEXT
+ END OF c_service .
+
+ CLASS-METHODS get_request_uri
+ IMPORTING
+ iv_url TYPE string
+ iv_service TYPE string
+ RETURNING
+ VALUE(rv_uri) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS check_report_status
+ IMPORTING
+ !iv_string TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS branch_list
+ IMPORTING
+ !iv_url TYPE string
+ !iv_service TYPE string
+ EXPORTING
+ !eo_client TYPE REF TO zcl_abapgit_http_client
+ !ei_branch_list TYPE REF TO zif_abapgit_git_branch_list
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS find_branch
+ IMPORTING
+ !iv_url TYPE string
+ !iv_service TYPE string
+ !iv_branch_name TYPE string
+ EXPORTING
+ !eo_client TYPE REF TO zcl_abapgit_http_client
+ !ev_branch TYPE zif_abapgit_git_definitions=>ty_sha1
+ !ei_branch_list TYPE REF TO zif_abapgit_git_branch_list
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS parse
+ EXPORTING
+ !ev_pack TYPE xstring
+ CHANGING
+ !cv_data TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS upload_pack
+ IMPORTING
+ !io_client TYPE REF TO zcl_abapgit_http_client
+ !iv_url TYPE string
+ !iv_deepen_level TYPE i DEFAULT 0
+ !it_hashes TYPE zif_abapgit_git_definitions=>ty_sha1_tt
+ RETURNING
+ VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_git_utils DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES:
+ ty_null TYPE c LENGTH 1 .
+
+ CLASS-METHODS get_null
+ RETURNING
+ VALUE(rv_c) TYPE ty_null .
+ CLASS-METHODS pkt_string
+ IMPORTING
+ !iv_string TYPE string
+ RETURNING
+ VALUE(rv_pkt) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS length_utf8_hex
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rv_len) TYPE i
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_hash DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS adler32
+ IMPORTING
+ !iv_xstring TYPE xstring
+ RETURNING
+ VALUE(rv_checksum) TYPE zif_abapgit_git_definitions=>ty_adler32 .
+ CLASS-METHODS sha1
+ IMPORTING
+ !iv_type TYPE zif_abapgit_git_definitions=>ty_type
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rv_sha1) TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS sha1_commit
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rv_sha1) TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS sha1_tree
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rv_sha1) TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS sha1_tag
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rv_sha1) TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS sha1_blob
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rv_sha1) TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS sha1_raw
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rv_sha1) TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS sha1_string
+ IMPORTING
+ !iv_data TYPE string
+ RETURNING
+ VALUE(rv_sha1) TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_zlib DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_decompress,
+ raw TYPE xstring,
+ compressed_len TYPE i,
+ END OF ty_decompress .
+
+ CLASS-METHODS decompress
+ IMPORTING
+ !iv_compressed TYPE xsequence
+ RETURNING
+ VALUE(rs_data) TYPE ty_decompress .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS: c_maxdcodes TYPE i VALUE 30.
+
+ CLASS-DATA: gv_out TYPE xstring,
+ go_lencode TYPE REF TO zcl_abapgit_zlib_huffman,
+ go_distcode TYPE REF TO zcl_abapgit_zlib_huffman,
+ go_stream TYPE REF TO zcl_abapgit_zlib_stream.
+
+ TYPES: BEGIN OF ty_pair,
+ length TYPE i,
+ distance TYPE i,
+ END OF ty_pair.
+
+ CLASS-METHODS:
+ decode
+ IMPORTING io_huffman TYPE REF TO zcl_abapgit_zlib_huffman
+ RETURNING VALUE(rv_symbol) TYPE i,
+ map_length
+ IMPORTING iv_code TYPE i
+ RETURNING VALUE(rv_length) TYPE i,
+ map_distance
+ IMPORTING iv_code TYPE i
+ RETURNING VALUE(rv_distance) TYPE i,
+ dynamic,
+ fixed,
+ not_compressed,
+ decode_loop,
+ read_pair
+ IMPORTING iv_length TYPE i
+ RETURNING VALUE(rs_pair) TYPE ty_pair,
+ copy_out
+ IMPORTING is_pair TYPE ty_pair.
+
+ENDCLASS.
+CLASS zcl_abapgit_zlib_convert DEFINITION FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS hex_to_bits
+ IMPORTING
+ !iv_hex TYPE xsequence
+ RETURNING
+ VALUE(rv_bits) TYPE string.
+
+ CLASS-METHODS bits_to_int
+ IMPORTING
+ !iv_bits TYPE clike
+ RETURNING
+ VALUE(rv_int) TYPE i.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_zlib_huffman DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES:
+ ty_lengths TYPE STANDARD TABLE OF i WITH DEFAULT KEY .
+
+ CONSTANTS c_maxbits TYPE i VALUE 15 ##NO_TEXT.
+
+ METHODS constructor
+ IMPORTING
+ !it_lengths TYPE ty_lengths .
+ METHODS get_count
+ IMPORTING
+ !iv_index TYPE i
+ RETURNING
+ VALUE(rv_value) TYPE i .
+ METHODS get_symbol
+ IMPORTING
+ !iv_index TYPE i
+ RETURNING
+ VALUE(rv_value) TYPE i .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA: mt_count TYPE STANDARD TABLE OF i WITH DEFAULT KEY,
+ mt_symbol TYPE STANDARD TABLE OF i WITH DEFAULT KEY.
+
+ENDCLASS.
+CLASS zcl_abapgit_zlib_stream DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !iv_data TYPE xstring .
+ METHODS take_bits
+ IMPORTING
+ !iv_length TYPE i
+ RETURNING
+ VALUE(rv_bits) TYPE string .
+ METHODS take_int
+ IMPORTING
+ !iv_length TYPE i
+ RETURNING
+ VALUE(rv_int) TYPE i .
+ METHODS remaining
+ RETURNING
+ VALUE(rv_length) TYPE i .
+ "! Take bytes, there's an implicit realignment to start at the beginning of a byte
+ "! i.e. if next bit of current byte is not the first bit, then this byte is skipped
+ "! and the bytes are taken from the next one.
+ "! @parameter iv_length |
+ "! @parameter rv_bytes |
+ METHODS take_bytes
+ IMPORTING
+ !iv_length TYPE i
+ RETURNING
+ VALUE(rv_bytes) TYPE xstring .
+ METHODS clear_bits .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_bits TYPE string .
+ DATA mv_compressed TYPE xstring .
+ENDCLASS.
+CLASS zcl_abapgit_git_url DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS get_commit_display_url
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ RETURNING
+ VALUE(rv_url) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS validate_url
+ IMPORTING
+ !iv_url TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ METHODS get_default_commit_display_url
+ IMPORTING
+ !iv_repo_url TYPE string
+ !iv_hash TYPE zif_abapgit_git_definitions=>ty_sha1
+ RETURNING
+ VALUE(rv_commit_url) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_pr_enum_gitea DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_pr_enum_provider .
+
+ METHODS constructor
+ IMPORTING
+ !iv_user_and_repo TYPE string
+ !ii_http_agent TYPE REF TO zif_abapgit_http_agent
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_info,
+ repo_json TYPE REF TO zif_abapgit_ajson,
+ pulls TYPE zif_abapgit_pr_enum_provider=>ty_pull_requests,
+ END OF ty_info.
+
+ DATA mi_http_agent TYPE REF TO zif_abapgit_http_agent.
+ DATA mv_repo_url TYPE string.
+
+ METHODS fetch_repo_by_url
+ IMPORTING
+ iv_repo_url TYPE string
+ RETURNING
+ VALUE(rs_info) TYPE ty_info
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS convert_list
+ IMPORTING
+ ii_json TYPE REF TO zif_abapgit_ajson
+ RETURNING
+ VALUE(rt_pulls) TYPE zif_abapgit_pr_enum_provider=>ty_pull_requests.
+
+ METHODS clean_url
+ IMPORTING
+ iv_url TYPE string
+ RETURNING
+ VALUE(rv_url) TYPE string.
+ENDCLASS.
+CLASS zcl_abapgit_pr_enum_github DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_pr_enum_provider .
+
+ METHODS constructor
+ IMPORTING
+ !iv_user_and_repo TYPE string
+ !ii_http_agent TYPE REF TO zif_abapgit_http_agent
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS create_pull_request
+ IMPORTING
+ iv_title TYPE clike
+ iv_body TYPE clike OPTIONAL
+ iv_head TYPE string
+ iv_base TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS merge_pull_request
+ IMPORTING
+ iv_pull_number TYPE i
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS update_pull_request_branch
+ IMPORTING
+ iv_pull_number TYPE i
+ iv_expected_head_sha TYPE zif_abapgit_git_definitions=>ty_sha1
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS ready_for_review
+ IMPORTING
+ iv_pull_number TYPE i
+ RAISING
+ zcx_abapgit_exception.
+
+ TYPES: BEGIN OF ty_status,
+ name TYPE string,
+ status TYPE string,
+ conclusion TYPE string,
+ title TYPE string,
+ END OF ty_status.
+ TYPES ty_status_tt TYPE STANDARD TABLE OF ty_status WITH DEFAULT KEY.
+ METHODS get_check_runs
+ IMPORTING
+ iv_ref TYPE string
+ RETURNING
+ VALUE(rt_status) TYPE ty_status_tt
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_info,
+ repo_json TYPE REF TO zif_abapgit_ajson,
+ pulls TYPE zif_abapgit_pr_enum_provider=>ty_pull_requests,
+ END OF ty_info.
+
+ DATA mi_http_agent TYPE REF TO zif_abapgit_http_agent.
+ DATA mv_repo_url TYPE string.
+ DATA mv_user_and_repo TYPE string.
+
+ METHODS fetch_repo_by_url
+ IMPORTING
+ iv_repo_url TYPE string
+ RETURNING
+ VALUE(rs_info) TYPE ty_info
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS convert_list
+ IMPORTING
+ ii_json TYPE REF TO zif_abapgit_ajson
+ RETURNING
+ VALUE(rt_pulls) TYPE zif_abapgit_pr_enum_provider=>ty_pull_requests.
+
+ METHODS clean_url
+ IMPORTING
+ iv_url TYPE string
+ RETURNING
+ VALUE(rv_url) TYPE string.
+ENDCLASS.
+CLASS zcl_abapgit_pr_enumerator DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ iv_url TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_pulls
+ RETURNING
+ VALUE(rt_pulls) TYPE zif_abapgit_pr_enum_provider=>ty_pull_requests
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS create_repository
+ IMPORTING
+ iv_description TYPE string OPTIONAL
+ iv_is_org TYPE abap_bool DEFAULT abap_true
+ iv_private TYPE abap_bool DEFAULT abap_true
+ iv_auto_init TYPE abap_bool DEFAULT abap_true
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS create_initial_branch
+ IMPORTING
+ iv_readme TYPE string OPTIONAL
+ iv_branch_name TYPE string DEFAULT 'main'
+ RETURNING
+ VALUE(rv_branch_name) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS new
+ IMPORTING
+ iv_url TYPE string
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_pr_enumerator
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mv_repo_url TYPE string.
+ DATA mi_enum_provider TYPE REF TO zif_abapgit_pr_enum_provider.
+
+ CLASS-METHODS create_provider
+ IMPORTING
+ iv_repo_url TYPE string
+ RETURNING
+ VALUE(ri_provider) TYPE REF TO zif_abapgit_pr_enum_provider
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_http DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_scheme,
+ digest TYPE string VALUE 'Digest',
+ END OF c_scheme .
+
+ CLASS-METHODS get_agent
+ RETURNING
+ VALUE(rv_agent) TYPE string .
+
+ TYPES: BEGIN OF ty_key_value,
+ key TYPE string,
+ value TYPE string,
+ END OF ty_key_value.
+ TYPES ty_headers TYPE STANDARD TABLE OF ty_key_value WITH DEFAULT KEY.
+
+ CLASS-METHODS create_by_url
+ IMPORTING
+ !iv_url TYPE string
+ it_headers TYPE ty_headers OPTIONAL
+ RETURNING
+ VALUE(ro_client) TYPE REF TO zcl_abapgit_http_client
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS check_connection
+ IMPORTING
+ !iv_url TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+
+ CLASS-METHODS check_auth_requested
+ IMPORTING
+ !ii_client TYPE REF TO if_http_client
+ RETURNING
+ VALUE(rv_auth_requested) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS is_local_system
+ IMPORTING
+ !iv_url TYPE string
+ RETURNING
+ VALUE(rv_bool) TYPE abap_bool .
+ CLASS-METHODS acquire_login_details
+ IMPORTING
+ !ii_client TYPE REF TO if_http_client
+ !io_client TYPE REF TO zcl_abapgit_http_client
+ !iv_url TYPE string
+ RETURNING
+ VALUE(rv_scheme) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS get_http_client
+ IMPORTING
+ !iv_url TYPE string
+ RETURNING
+ VALUE(ri_client) TYPE REF TO if_http_client
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS get_connection_longtext
+ IMPORTING
+ !iv_host TYPE string
+ !iv_ssl_id TYPE ssfapplssl
+ !iv_proxy_host TYPE string
+ !iv_proxy_service TYPE string
+ RETURNING
+ VALUE(rv_longtext) TYPE string.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_http_agent DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_http_agent .
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_instance) TYPE REF TO zif_abapgit_http_agent .
+
+ METHODS constructor.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mo_global_headers TYPE REF TO zcl_abapgit_string_map.
+
+ CLASS-METHODS attach_payload
+ IMPORTING
+ ii_request TYPE REF TO if_http_request
+ iv_payload TYPE any
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_http_client DEFINITION CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ METHODS:
+ constructor
+ IMPORTING ii_client TYPE REF TO if_http_client,
+ close,
+ set_digest
+ IMPORTING io_digest TYPE REF TO zcl_abapgit_http_digest,
+ send_receive_close
+ IMPORTING iv_data TYPE xstring
+ RETURNING VALUE(rv_data) TYPE xstring
+ RAISING zcx_abapgit_exception,
+ get_cdata
+ RETURNING VALUE(rv_value) TYPE string,
+ check_http_200
+ RAISING zcx_abapgit_exception,
+ check_smart_response
+ IMPORTING iv_expected_content_type TYPE string
+ iv_content_regex TYPE string
+ RAISING zcx_abapgit_exception,
+ send_receive
+ RAISING zcx_abapgit_exception,
+ set_headers
+ IMPORTING iv_url TYPE string
+ iv_service TYPE string
+ RAISING zcx_abapgit_exception.
+
+ METHODS set_header
+ IMPORTING
+ iv_key TYPE string
+ iv_value TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mi_client TYPE REF TO if_http_client,
+ mo_digest TYPE REF TO zcl_abapgit_http_digest.
+
+ENDCLASS.
+CLASS zcl_abapgit_http_digest DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !ii_client TYPE REF TO if_http_client
+ !iv_username TYPE string
+ !iv_password TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS run
+ IMPORTING
+ !ii_client TYPE REF TO if_http_client
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mv_ha1 TYPE string,
+ mv_username TYPE string,
+ mv_realm TYPE string,
+ mv_qop TYPE string,
+ mv_nonce TYPE string.
+
+ CLASS-DATA: gv_nc TYPE n LENGTH 8.
+
+ CLASS-METHODS:
+ md5
+ IMPORTING
+ iv_data TYPE string
+ RETURNING
+ VALUE(rv_hash) TYPE string
+ RAISING zcx_abapgit_exception.
+
+ METHODS:
+ hash
+ IMPORTING
+ iv_qop TYPE string
+ iv_nonce TYPE string
+ iv_uri TYPE string
+ iv_method TYPE string
+ iv_cnonse TYPE string
+ RETURNING
+ VALUE(rv_response) TYPE string
+ RAISING zcx_abapgit_exception,
+ parse
+ IMPORTING
+ ii_client TYPE REF TO if_http_client.
+
+ENDCLASS.
+CLASS zcl_abapgit_login_manager DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS load
+ IMPORTING
+ !iv_uri TYPE string
+ RETURNING
+ VALUE(rv_authorization) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS save
+ IMPORTING
+ !iv_uri TYPE string
+ !iv_authorization TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS clear .
+ CLASS-METHODS set_basic
+ IMPORTING
+ !iv_uri TYPE string
+ !iv_username TYPE string
+ !iv_password TYPE string
+ RETURNING
+ VALUE(rv_auth) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS set_bearer
+ IMPORTING
+ !iv_uri TYPE string
+ !iv_token TYPE string
+ RETURNING
+ VALUE(rv_auth) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get
+ IMPORTING
+ !iv_uri TYPE string
+ RETURNING
+ VALUE(rv_auth) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_auth,
+ uri TYPE string,
+ authorization TYPE string,
+ END OF ty_auth .
+
+ CLASS-DATA:
+ gt_auth TYPE TABLE OF ty_auth WITH DEFAULT KEY .
+
+ CLASS-METHODS append
+ IMPORTING
+ !iv_uri TYPE string
+ !iv_auth TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_proxy_auth DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ CLASS-METHODS:
+ run
+ IMPORTING ii_client TYPE REF TO if_http_client
+ RAISING zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+ CLASS-DATA: gv_username TYPE string,
+ gv_password TYPE string.
+
+ CLASS-METHODS: enter RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_proxy_config DEFINITION FINAL CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ METHODS:
+ constructor,
+
+ get_proxy_url
+ IMPORTING
+ iv_repo_url TYPE csequence OPTIONAL
+ RETURNING
+ VALUE(rv_proxy_url) TYPE string,
+
+ get_proxy_port
+ IMPORTING
+ iv_repo_url TYPE csequence OPTIONAL
+ RETURNING
+ VALUE(rv_port) TYPE string,
+
+ get_proxy_authentication
+ IMPORTING
+ iv_repo_url TYPE csequence OPTIONAL
+ RETURNING
+ VALUE(rv_auth) TYPE abap_bool.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mo_settings TYPE REF TO zcl_abapgit_settings,
+ mi_exit TYPE REF TO zif_abapgit_exit.
+
+ METHODS:
+ bypass_proxy
+ IMPORTING
+ iv_repo_url TYPE csequence OPTIONAL
+ RETURNING
+ VALUE(rv_bypass_proxy) TYPE abap_bool.
+
+ENDCLASS.
+CLASS zcl_abapgit_url DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS validate
+ IMPORTING
+ !iv_url TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS host
+ IMPORTING
+ !iv_url TYPE string
+ RETURNING
+ VALUE(rv_host) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS name
+ IMPORTING
+ !iv_url TYPE string
+ !iv_validate TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rv_name) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS path_name
+ IMPORTING
+ !iv_url TYPE string
+ RETURNING
+ VALUE(rv_path_name) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS is_abapgit_repo
+ IMPORTING
+ !iv_url TYPE string
+ RETURNING
+ VALUE(rv_abapgit) TYPE abap_bool .
+ CLASS-METHODS url_address
+ IMPORTING
+ !iv_url TYPE string
+ RETURNING
+ VALUE(rv_adress) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-METHODS regex
+ IMPORTING
+ !iv_url TYPE string
+ EXPORTING
+ !ev_host TYPE string
+ !ev_path TYPE string
+ !ev_name TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_code_inspector DEFINITION
+ CREATE PROTECTED.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_code_inspector .
+
+ METHODS constructor
+ IMPORTING
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS get_code_inspector
+ IMPORTING
+ !iv_package TYPE devclass
+ RETURNING
+ VALUE(ri_code_inspector) TYPE REF TO zif_abapgit_code_inspector
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS set_code_inspector
+ IMPORTING
+ !iv_package TYPE devclass
+ !ii_code_inspector TYPE REF TO zif_abapgit_code_inspector.
+
+ PROTECTED SECTION.
+ DATA mv_package TYPE devclass .
+
+ METHODS create_variant
+ IMPORTING
+ !iv_variant TYPE sci_chkv
+ RETURNING
+ VALUE(ro_variant) TYPE REF TO cl_ci_checkvariant
+ RAISING
+ zcx_abapgit_exception .
+ METHODS cleanup
+ IMPORTING
+ !io_set TYPE REF TO cl_ci_objectset
+ RAISING
+ zcx_abapgit_exception .
+ METHODS skip_object
+ IMPORTING
+ !is_obj TYPE scir_objs
+ RETURNING
+ VALUE(rv_skip) TYPE abap_bool.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_code_inspector_pack,
+ package TYPE devclass,
+ instance TYPE REF TO zif_abapgit_code_inspector,
+ END OF ty_code_inspector_pack,
+ ty_code_inspector_packs TYPE HASHED TABLE OF ty_code_inspector_pack WITH UNIQUE KEY package.
+
+ CLASS-DATA gt_code_inspector TYPE ty_code_inspector_packs.
+
+ DATA mv_success TYPE abap_bool .
+ DATA mv_summary TYPE string.
+
+ TYPES: ty_run_mode TYPE c LENGTH 1.
+
+ CONSTANTS:
+ BEGIN OF co_run_mode,
+ run_with_popup TYPE ty_run_mode VALUE 'P',
+ run_after_popup TYPE ty_run_mode VALUE 'A',
+ run_via_rfc TYPE ty_run_mode VALUE 'R',
+ run_in_batch TYPE ty_run_mode VALUE 'B',
+ run_loc_parallel TYPE ty_run_mode VALUE 'L',
+ run_direct TYPE ty_run_mode VALUE 'L',
+ END OF co_run_mode .
+ DATA mo_inspection TYPE REF TO cl_ci_inspection .
+ DATA mv_name TYPE sci_objs .
+ DATA mv_run_mode TYPE c LENGTH 1 .
+
+ METHODS create_objectset
+ RETURNING
+ VALUE(ro_set) TYPE REF TO cl_ci_objectset .
+ METHODS run_inspection
+ IMPORTING
+ !io_inspection TYPE REF TO cl_ci_inspection
+ RETURNING
+ VALUE(rt_list) TYPE scit_alvlist
+ RAISING
+ zcx_abapgit_exception .
+ METHODS create_inspection
+ IMPORTING
+ !io_set TYPE REF TO cl_ci_objectset
+ !io_variant TYPE REF TO cl_ci_checkvariant
+ RETURNING
+ VALUE(ro_inspection) TYPE REF TO cl_ci_inspection
+ RAISING
+ zcx_abapgit_exception .
+ METHODS decide_run_mode
+ RETURNING
+ VALUE(rv_run_mode) TYPE ty_run_mode .
+ METHODS filter_inspection
+ CHANGING
+ !ct_list TYPE scit_alvlist .
+ENDCLASS.
+CLASS zcl_abapgit_where_used_tools DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES ty_devc_range TYPE RANGE OF tadir-devclass.
+ TYPES:
+ BEGIN OF ty_dependency,
+ root_package TYPE devclass,
+ package TYPE devclass,
+ obj_type TYPE tadir-object,
+ obj_prog_type TYPE trdir-subc,
+ obj_name TYPE tadir-obj_name,
+ obj_cls TYPE string,
+ dep_package TYPE devclass,
+ dep_obj_type TYPE tadir-object,
+ dep_obj_name TYPE tadir-obj_name,
+ dep_used_cls TYPE string,
+ dep_used_obj TYPE string,
+ END OF ty_dependency.
+ TYPES:
+ ty_dependency_tt TYPE STANDARD TABLE OF ty_dependency WITH DEFAULT KEY.
+
+ CLASS-METHODS new
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_where_used_tools.
+
+ " the initial version of this utility is also available as a standalone tool
+ " here: https://github.com/sbcgua/crossdeps
+ METHODS select_external_usages
+ IMPORTING
+ iv_package TYPE tadir-devclass
+ iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
+ ir_package_scope TYPE ty_devc_range OPTIONAL
+ RETURNING
+ VALUE(rt_objs) TYPE ty_dependency_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_obj_signature,
+ package TYPE devclass,
+ obj_type TYPE tadir-object,
+ obj_name TYPE tadir-obj_name,
+ END OF ty_obj_signature.
+
+ TYPES ty_where_used_tt TYPE STANDARD TABLE OF rsfindlst WITH DEFAULT KEY.
+ TYPES ty_seu_obj TYPE STANDARD TABLE OF seu_obj WITH DEFAULT KEY.
+ TYPES:
+ BEGIN OF ty_dev_object,
+ type TYPE seu_stype,
+ tadir TYPE trobjtype,
+ END OF ty_dev_object.
+
+ DATA mt_object_packages TYPE HASHED TABLE OF ty_obj_signature WITH UNIQUE KEY obj_type obj_name.
+ DATA mt_dev_obj_cache TYPE HASHED TABLE OF ty_dev_object WITH UNIQUE KEY type.
+
+ METHODS get_where_used
+ IMPORTING
+ iv_obj_type TYPE euobj-id
+ iv_obj_name TYPE tadir-obj_name
+ it_scope TYPE ty_seu_obj OPTIONAL
+ ir_package_scope TYPE ty_devc_range OPTIONAL
+ RETURNING
+ VALUE(rt_findings) TYPE ty_where_used_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_obj_package
+ IMPORTING
+ iv_obj_type TYPE tadir-object
+ iv_obj_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_package) TYPE tadir-devclass.
+
+ METHODS get_func_package
+ IMPORTING
+ iv_func_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_package) TYPE tadir-devclass.
+
+ METHODS get_incl_package
+ IMPORTING
+ iv_prog_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_package) TYPE tadir-devclass.
+
+ METHODS build_package_scope
+ IMPORTING
+ it_tadir TYPE STANDARD TABLE
+ ir_package_scope TYPE ty_devc_range
+ RETURNING
+ VALUE(rt_package_scope) TYPE ty_devc_range.
+
+ METHODS collect_where_used
+ IMPORTING
+ it_tadir TYPE STANDARD TABLE
+ ir_package_scope TYPE ty_devc_range
+ RETURNING
+ VALUE(rt_objs) TYPE ty_dependency_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS convert_list
+ IMPORTING
+ iv_package TYPE ty_dependency-dep_package
+ iv_obj_type TYPE ty_dependency-dep_obj_type
+ iv_obj_name TYPE ty_dependency-dep_obj_name
+ it_where_used TYPE ty_where_used_tt
+ RETURNING
+ VALUE(rt_objs) TYPE ty_dependency_tt.
+
+ METHODS decode_obj_type
+ IMPORTING
+ iv_type TYPE rsfindlst-object_cls
+ RETURNING
+ VALUE(rv_type) TYPE ty_dev_object-tadir.
+
+ METHODS find_root_packages
+ CHANGING
+ ct_objs TYPE ty_dependency_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_ajson DEFINITION
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_ajson.
+
+ ALIASES:
+ is_empty FOR zif_abapgit_ajson~is_empty,
+ exists FOR zif_abapgit_ajson~exists,
+ members FOR zif_abapgit_ajson~members,
+ get FOR zif_abapgit_ajson~get,
+ get_boolean FOR zif_abapgit_ajson~get_boolean,
+ get_integer FOR zif_abapgit_ajson~get_integer,
+ get_number FOR zif_abapgit_ajson~get_number,
+ get_date FOR zif_abapgit_ajson~get_date,
+ get_timestamp FOR zif_abapgit_ajson~get_timestamp,
+ get_string FOR zif_abapgit_ajson~get_string,
+ slice FOR zif_abapgit_ajson~slice,
+ to_abap FOR zif_abapgit_ajson~to_abap,
+ array_to_string_table FOR zif_abapgit_ajson~array_to_string_table.
+
+ ALIASES:
+ clear FOR zif_abapgit_ajson~clear,
+ set FOR zif_abapgit_ajson~set,
+ setx FOR zif_abapgit_ajson~setx,
+ set_boolean FOR zif_abapgit_ajson~set_boolean,
+ set_string FOR zif_abapgit_ajson~set_string,
+ set_integer FOR zif_abapgit_ajson~set_integer,
+ set_date FOR zif_abapgit_ajson~set_date,
+ set_timestamp FOR zif_abapgit_ajson~set_timestamp,
+ set_null FOR zif_abapgit_ajson~set_null,
+ delete FOR zif_abapgit_ajson~delete,
+ touch_array FOR zif_abapgit_ajson~touch_array,
+ push FOR zif_abapgit_ajson~push,
+ stringify FOR zif_abapgit_ajson~stringify.
+
+ ALIASES:
+ clone FOR zif_abapgit_ajson~clone,
+ filter FOR zif_abapgit_ajson~filter,
+ map FOR zif_abapgit_ajson~map.
+
+ ALIASES:
+ mt_json_tree FOR zif_abapgit_ajson~mt_json_tree,
+ keep_item_order FOR zif_abapgit_ajson~keep_item_order,
+ format_datetime FOR zif_abapgit_ajson~format_datetime,
+ to_abap_corresponding_only FOR zif_abapgit_ajson~to_abap_corresponding_only,
+ freeze FOR zif_abapgit_ajson~freeze.
+
+ CLASS-METHODS parse
+ IMPORTING
+ !iv_json TYPE any
+ !iv_freeze TYPE abap_bool DEFAULT abap_false
+ !ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
+ !iv_keep_item_order TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ CLASS-METHODS create_empty " Might be deprecated, prefer using new( ) or create object
+ IMPORTING
+ !ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
+ iv_keep_item_order TYPE abap_bool DEFAULT abap_false
+ iv_format_datetime TYPE abap_bool DEFAULT abap_true
+ iv_to_abap_corresponding_only TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson.
+
+ " Experimental ! May change
+ CLASS-METHODS create_from " TODO, rename to 'from' ?
+ IMPORTING
+ !ii_source_json TYPE REF TO zif_abapgit_ajson
+ !ii_filter TYPE REF TO zif_abapgit_ajson_filter OPTIONAL " Might be deprecated, use filter() instead
+ !ii_mapper TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL " Might be deprecated, use map() instead
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ METHODS constructor
+ IMPORTING
+ iv_keep_item_order TYPE abap_bool DEFAULT abap_false
+ iv_format_datetime TYPE abap_bool DEFAULT abap_true
+ iv_to_abap_corresponding_only TYPE abap_bool DEFAULT abap_false.
+
+ CLASS-METHODS new
+ IMPORTING
+ iv_keep_item_order TYPE abap_bool DEFAULT abap_false
+ iv_format_datetime TYPE abap_bool DEFAULT abap_true
+ iv_to_abap_corresponding_only TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson.
+
+ CLASS-METHODS normalize_path
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_path) TYPE string.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ CLASS-DATA go_float_regex TYPE REF TO cl_abap_regex.
+
+ DATA ms_opts TYPE zif_abapgit_ajson=>ty_opts.
+ DATA mi_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping. " DEPRECATED, will be removed
+
+ METHODS get_item
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rv_item) TYPE REF TO zif_abapgit_ajson_types=>ty_node.
+ METHODS prove_path_exists
+ IMPORTING
+ iv_path TYPE string
+ RETURNING
+ VALUE(rr_end_node) TYPE REF TO zif_abapgit_ajson_types=>ty_node
+ RAISING
+ zcx_abapgit_ajson_error.
+ METHODS delete_subtree
+ IMPORTING
+ iv_path TYPE string
+ iv_name TYPE string
+ ir_parent TYPE REF TO zif_abapgit_ajson_types=>ty_node OPTIONAL
+ RETURNING
+ VALUE(rs_top_node) TYPE zif_abapgit_ajson_types=>ty_node.
+ METHODS read_only_watchdog
+ RAISING
+ zcx_abapgit_ajson_error.
+ENDCLASS.
+CLASS zcl_abapgit_ajson_filter_lib DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create_empty_filter
+ RETURNING
+ VALUE(ri_filter) TYPE REF TO zif_abapgit_ajson_filter
+ RAISING
+ zcx_abapgit_ajson_error .
+ CLASS-METHODS create_path_filter
+ IMPORTING
+ !it_skip_paths TYPE string_table OPTIONAL
+ !iv_skip_paths TYPE string OPTIONAL
+ !iv_pattern_search TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_filter) TYPE REF TO zif_abapgit_ajson_filter
+ RAISING
+ zcx_abapgit_ajson_error .
+ CLASS-METHODS create_and_filter
+ IMPORTING
+ !it_filters TYPE zif_abapgit_ajson_filter=>ty_filter_tab
+ RETURNING
+ VALUE(ri_filter) TYPE REF TO zif_abapgit_ajson_filter
+ RAISING
+ zcx_abapgit_ajson_error .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS kHGwlpuwVGRXmbkWZJMoWRsLzEdjUi DEFINITION DEFERRED.
+CLASS kHGwlpuwVGRXmbkWZJMorCLylKulMM DEFINITION DEFERRED.
+CLASS kHGwlpuwVGRXmbkWZJMooAlevhaDMg DEFINITION DEFERRED.
+CLASS kHGwlpuwVGRXmbkWZJMoYWDnXPYsQA DEFINITION DEFERRED.
+CLASS kHGwlpuwVGRXmbkWZJMoIaLFAtEmIg DEFINITION DEFERRED.
+CLASS kHGwlpuwVGRXmbkWZJMoayhtkOTSGN DEFINITION DEFERRED.
+CLASS kHGwlpuwVGRXmbkWZJMocwrelrEIET DEFINITION DEFERRED.
+CLASS kHGwlpuwVGRXmbkWZJMoTFhfUGDgXz DEFINITION DEFERRED.
+* renamed: zcl_abapgit_ajson_mapping :: lcl_mapping_fields
+CLASS kHGwlpuwVGRXmbkWZJMoTFhfUGDgXz DEFINITION.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_ajson_mapping.
+
+ METHODS constructor
+ IMPORTING
+ it_mapping_fields TYPE zif_abapgit_ajson_mapping~ty_mapping_fields OPTIONAL.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+ DATA mt_mapping_fields TYPE zif_abapgit_ajson_mapping~ty_mapping_fields.
+
+ENDCLASS.
+
+* renamed: zcl_abapgit_ajson_mapping :: lcl_rename
+CLASS kHGwlpuwVGRXmbkWZJMocwrelrEIET DEFINITION.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_ajson_mapping.
+
+ METHODS constructor
+ IMPORTING
+ it_rename_map TYPE zif_abapgit_ajson_mapping~tty_rename_map
+ iv_rename_by TYPE i.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+ DATA mt_rename_map TYPE zif_abapgit_ajson_mapping~tty_rename_map.
+ DATA mv_rename_by TYPE i.
+
+ENDCLASS.
+
+* renamed: zcl_abapgit_ajson_mapping :: lcl_mapping_to_upper
+CLASS kHGwlpuwVGRXmbkWZJMoayhtkOTSGN DEFINITION.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_ajson_mapping.
+
+ METHODS constructor
+ IMPORTING
+ it_mapping_fields TYPE zif_abapgit_ajson_mapping~ty_mapping_fields OPTIONAL.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+ DATA mi_mapping_fields TYPE REF TO zif_abapgit_ajson_mapping.
+
+ENDCLASS.
+* renamed: zcl_abapgit_ajson_mapping :: lcl_mapping_to_lower
+CLASS kHGwlpuwVGRXmbkWZJMoIaLFAtEmIg DEFINITION.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_ajson_mapping.
+
+ METHODS constructor
+ IMPORTING
+ it_mapping_fields TYPE zif_abapgit_ajson_mapping~ty_mapping_fields OPTIONAL.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+ DATA mi_mapping_fields TYPE REF TO zif_abapgit_ajson_mapping.
+
+ENDCLASS.
+* renamed: zcl_abapgit_ajson_mapping :: lcl_mapping_camel
+CLASS kHGwlpuwVGRXmbkWZJMoYWDnXPYsQA DEFINITION.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_ajson_mapping.
+
+ METHODS constructor
+ IMPORTING
+ it_mapping_fields TYPE zif_abapgit_ajson_mapping~ty_mapping_fields OPTIONAL
+ iv_first_json_upper TYPE abap_bool DEFAULT abap_true.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+ DATA mv_first_json_upper TYPE abap_bool.
+ DATA mi_mapping_fields TYPE REF TO zif_abapgit_ajson_mapping.
+
+ENDCLASS.
+
+* renamed: zcl_abapgit_ajson_mapping :: lcl_compound_mapper
+CLASS kHGwlpuwVGRXmbkWZJMooAlevhaDMg DEFINITION.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_ajson_mapping.
+
+ METHODS constructor
+ IMPORTING
+ it_queue TYPE zif_abapgit_ajson_mapping=>ty_table_of.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+ DATA mt_queue TYPE zif_abapgit_ajson_mapping=>ty_table_of.
+
+ENDCLASS.
+
+* renamed: zcl_abapgit_ajson_mapping :: lcl_to_snake
+CLASS kHGwlpuwVGRXmbkWZJMorCLylKulMM DEFINITION.
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_ajson_mapping.
+ENDCLASS.
+
+* renamed: zcl_abapgit_ajson_mapping :: lcl_to_camel
+CLASS kHGwlpuwVGRXmbkWZJMoWRsLzEdjUi DEFINITION.
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_ajson_mapping.
+ METHODS constructor
+ IMPORTING
+ iv_first_json_upper TYPE abap_bool.
+ PRIVATE SECTION.
+ DATA mv_first_json_upper TYPE abap_bool.
+ENDCLASS.
+
+CLASS zcl_abapgit_ajson_mapping DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CONSTANTS:
+ BEGIN OF rename_by,
+ attr_name TYPE i VALUE 0,
+ full_path TYPE i VALUE 1,
+ pattern TYPE i VALUE 2,
+ " regex type i value 3, " TODO add if needed in future
+ END OF rename_by.
+
+ CLASS-METHODS create_camel_case " DEPRECATED
+ IMPORTING
+ it_mapping_fields TYPE zif_abapgit_ajson_mapping=>ty_mapping_fields OPTIONAL
+ iv_first_json_upper TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
+
+ CLASS-METHODS create_upper_case
+ IMPORTING
+ it_mapping_fields TYPE zif_abapgit_ajson_mapping=>ty_mapping_fields OPTIONAL
+ RETURNING
+ VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
+
+ CLASS-METHODS create_lower_case
+ IMPORTING
+ it_mapping_fields TYPE zif_abapgit_ajson_mapping=>ty_mapping_fields OPTIONAL
+ RETURNING
+ VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
+
+ CLASS-METHODS create_field_mapping " DEPRECATED
+ IMPORTING
+ it_mapping_fields TYPE zif_abapgit_ajson_mapping=>ty_mapping_fields
+ RETURNING
+ VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
+
+ CLASS-METHODS create_rename
+ IMPORTING
+ it_rename_map TYPE zif_abapgit_ajson_mapping=>tty_rename_map
+ iv_rename_by TYPE i DEFAULT rename_by-attr_name
+ RETURNING
+ VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
+
+ CLASS-METHODS create_compound_mapper
+ IMPORTING
+ ii_mapper1 TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
+ ii_mapper2 TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
+ ii_mapper3 TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
+ it_more TYPE zif_abapgit_ajson_mapping=>ty_table_of OPTIONAL
+ RETURNING
+ VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
+
+ CLASS-METHODS create_to_snake_case
+ RETURNING
+ VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
+
+ CLASS-METHODS create_to_camel_case
+ IMPORTING
+ iv_first_json_upper TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_ajson_ref_init_lib DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create_path_refs_init
+ IMPORTING
+ !it_data_refs TYPE zif_abapgit_ajson_ref_init=>tty_data_refs
+ RETURNING
+ VALUE(ri_refs_init) TYPE REF TO zif_abapgit_ajson_ref_init
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ENDCLASS.
+CLASS zcl_abapgit_ajson_utilities DEFINITION
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS new
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson_utilities.
+ METHODS diff
+ IMPORTING
+ !iv_json_a TYPE string OPTIONAL
+ !iv_json_b TYPE string OPTIONAL
+ !io_json_a TYPE REF TO zif_abapgit_ajson OPTIONAL
+ !io_json_b TYPE REF TO zif_abapgit_ajson OPTIONAL
+ !iv_keep_empty_arrays TYPE abap_bool DEFAULT abap_false
+ EXPORTING
+ !eo_insert TYPE REF TO zif_abapgit_ajson
+ !eo_delete TYPE REF TO zif_abapgit_ajson
+ !eo_change TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+ METHODS merge
+ IMPORTING
+ !iv_json_a TYPE string OPTIONAL
+ !iv_json_b TYPE string OPTIONAL
+ !io_json_a TYPE REF TO zif_abapgit_ajson OPTIONAL
+ !io_json_b TYPE REF TO zif_abapgit_ajson OPTIONAL
+ !iv_keep_empty_arrays TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+ METHODS sort
+ IMPORTING
+ !iv_json TYPE string OPTIONAL
+ !io_json TYPE REF TO zif_abapgit_ajson OPTIONAL
+ RETURNING
+ VALUE(rv_sorted) TYPE string
+ RAISING
+ zcx_abapgit_ajson_error.
+ METHODS is_equal
+ IMPORTING
+ !iv_json_a TYPE string OPTIONAL
+ !iv_json_b TYPE string OPTIONAL
+ !ii_json_a TYPE REF TO zif_abapgit_ajson OPTIONAL
+ !ii_json_b TYPE REF TO zif_abapgit_ajson OPTIONAL
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool
+ RAISING
+ zcx_abapgit_ajson_error.
+ CLASS-METHODS iterate_array
+ IMPORTING
+ ii_json TYPE REF TO zif_abapgit_ajson
+ iv_path TYPE string
+ RETURNING
+ VALUE(ri_iterator) TYPE REF TO zif_abapgit_ajson_iterator
+ RAISING
+ zcx_abapgit_ajson_error.
+ CLASS-METHODS iterate_object
+ IMPORTING
+ ii_json TYPE REF TO zif_abapgit_ajson
+ iv_path TYPE string
+ RETURNING
+ VALUE(ri_iterator) TYPE REF TO zif_abapgit_ajson_iterator
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ DATA mo_json_a TYPE REF TO zif_abapgit_ajson.
+ DATA mo_json_b TYPE REF TO zif_abapgit_ajson.
+ DATA mo_insert TYPE REF TO zif_abapgit_ajson.
+ DATA mo_delete TYPE REF TO zif_abapgit_ajson.
+ DATA mo_change TYPE REF TO zif_abapgit_ajson.
+
+ METHODS normalize_input
+ IMPORTING
+ !iv_json TYPE string OPTIONAL
+ !io_json TYPE REF TO zif_abapgit_ajson OPTIONAL
+ RETURNING
+ VALUE(ro_json) TYPE REF TO zif_abapgit_ajson
+ RAISING
+ zcx_abapgit_ajson_error.
+ METHODS diff_a_b
+ IMPORTING
+ !iv_path TYPE string
+ RAISING
+ zcx_abapgit_ajson_error.
+ METHODS diff_b_a
+ IMPORTING
+ !iv_path TYPE string
+ !iv_array TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_ajson_error.
+ METHODS delete_empty_nodes
+ IMPORTING
+ !io_json TYPE REF TO zif_abapgit_ajson
+ !iv_keep_empty_arrays TYPE abap_bool
+ RAISING
+ zcx_abapgit_ajson_error.
+
+ENDCLASS.
+CLASS zcl_abapgit_aff_factory DEFINITION
+ .
+ PUBLIC SECTION.
+ CLASS-METHODS get_registry
+ RETURNING
+ VALUE(ri_registry) TYPE REF TO zif_abapgit_aff_registry.
+ PRIVATE SECTION.
+ CLASS-DATA gi_registry TYPE REF TO zif_abapgit_aff_registry.
+ENDCLASS.
+CLASS zcl_abapgit_aff_registry DEFINITION
+ FINAL
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_aff_factory .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_aff_registry.
+
+ CONSTANTS c_aff_feature TYPE string VALUE 'AFF'.
+
+ METHODS constructor.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_registry_entry,
+ obj_type TYPE tadir-object,
+ experimental TYPE abap_bool,
+ END OF ty_registry_entry.
+
+ CLASS-DATA:
+ gt_registry TYPE HASHED TABLE OF ty_registry_entry WITH UNIQUE KEY obj_type.
+
+ DATA mv_aff_enabled TYPE abap_bool.
+
+ CLASS-METHODS initialize_registry_table.
+
+ CLASS-METHODS:
+ register
+ IMPORTING
+ iv_obj_type TYPE tadir-object
+ iv_experimental TYPE abap_bool DEFAULT abap_false.
+
+ENDCLASS.
+CLASS zcl_abapgit_json_handler DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_json_abap_mapping,
+ json TYPE string,
+ abap TYPE string,
+ END OF ty_json_abap_mapping .
+ TYPES:
+ ty_json_abap_mappings TYPE STANDARD TABLE OF ty_json_abap_mapping WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_enum_mapping,
+ path TYPE string,
+ mappings TYPE ty_json_abap_mappings,
+ END OF ty_enum_mapping .
+ TYPES:
+ ty_enum_mappings TYPE STANDARD TABLE OF ty_enum_mapping WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_path_value_pair,
+ path TYPE string,
+ value TYPE string,
+ END OF ty_path_value_pair .
+ TYPES:
+ ty_skip_paths TYPE STANDARD TABLE OF ty_path_value_pair WITH KEY path .
+
+ "! Serializes data to xstring. Type of data is specified in the
+ "! implementing class.
+ "!
+ "! @parameter iv_data | data to be serialized
+ "! @parameter iv_enum_mappings | ABAP/JSON value mappings
+ "! @parameter iv_skip_paths | path/value pairs to be skipped during serialization
+ "! @parameter rv_result | serialized data
+ METHODS serialize
+ IMPORTING
+ !iv_data TYPE data
+ !iv_enum_mappings TYPE ty_enum_mappings OPTIONAL
+ !iv_skip_paths TYPE ty_skip_paths OPTIONAL
+ RETURNING
+ VALUE(rv_result) TYPE xstring
+ RAISING
+ cx_static_check .
+ "! Deserializes xstring into data. The type of data is specified in
+ "! the implementing class
+ "!
+ "! @parameter iv_content | xstring to be deserialized
+ "! @parameter iv_defaults | path-value pairs that apply if value is initial
+ "! @parameter ev_data | data of the xstring
+ METHODS deserialize
+ IMPORTING
+ !iv_content TYPE string
+ !iv_defaults TYPE ty_skip_paths OPTIONAL
+ !iv_enum_mappings TYPE ty_enum_mappings OPTIONAL
+ EXPORTING
+ !ev_data TYPE data
+ RAISING
+ cx_static_check .
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ METHODS:
+ map2json_original_language
+ CHANGING co_ajson TYPE REF TO zif_abapgit_ajson
+ RAISING zcx_abapgit_ajson_error,
+ map2json_custom_enum
+ IMPORTING it_enum_mappings TYPE ty_enum_mappings
+ CHANGING co_ajson TYPE REF TO zif_abapgit_ajson
+ RAISING zcx_abapgit_ajson_error,
+ map2json_abap_language_version
+ CHANGING co_ajson TYPE REF TO zif_abapgit_ajson
+ RAISING zcx_abapgit_ajson_error,
+ "! Get the enum mapping from object handler, as other enums as well
+ map2abap_abap_language_version
+ CHANGING co_ajson TYPE REF TO zif_abapgit_ajson
+ RAISING zcx_abapgit_ajson_error,
+ "! For deserialization
+ map2abap_original_language
+ CHANGING co_ajson TYPE REF TO zif_abapgit_ajson
+ RAISING zcx_abapgit_ajson_error,
+ "! For deserialization
+ set_defaults
+ IMPORTING it_defaults TYPE ty_skip_paths
+ CHANGING co_ajson TYPE REF TO zif_abapgit_ajson
+ RAISING zcx_abapgit_ajson_error,
+ map2abap_custom_enum
+ IMPORTING it_enum_mappings TYPE ty_enum_mappings
+ CHANGING co_ajson TYPE REF TO zif_abapgit_ajson
+ RAISING zcx_abapgit_ajson_error.
+
+ENDCLASS.
+CLASS zcl_abapgit_json_path DEFINITION CREATE PUBLIC.
+ PUBLIC SECTION.
+ METHODS: serialize
+ IMPORTING iv_json TYPE string
+ RETURNING VALUE(rt_result) TYPE string_table
+ RAISING zcx_abapgit_exception.
+ METHODS: deserialize
+ IMPORTING it_json_path TYPE string_table
+ RETURNING VALUE(rv_result) TYPE string
+ RAISING zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_dependencies DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS resolve
+ CHANGING
+ !ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_dependency,
+ depname TYPE dd02l-tabname,
+ deptyp TYPE c LENGTH 4,
+ deplocal TYPE dd02l-as4local,
+ refname TYPE dd02l-tabname,
+ reftyp TYPE c LENGTH 4,
+ kind TYPE c LENGTH 1,
+ END OF ty_dependency .
+ TYPES:
+ ty_dedenpencies TYPE STANDARD TABLE OF ty_dependency
+ WITH NON-UNIQUE DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_item,
+ obj_type TYPE tadir-object,
+ obj_name TYPE tadir-obj_name,
+ devclass TYPE devclass,
+ END OF ty_item .
+
+ CLASS-METHODS resolve_ddic
+ CHANGING
+ !ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_ddls_dependencies
+ IMPORTING
+ iv_ddls_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rt_dependency) TYPE ty_dedenpencies.
+ CLASS-METHODS resolve_packages
+ CHANGING
+ ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
+ENDCLASS.
+CLASS zcl_abapgit_file_deserialize DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get_results
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !ii_log TYPE REF TO zif_abapgit_log OPTIONAL
+ RETURNING
+ VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ CLASS-METHODS filter_files_to_deserialize
+ IMPORTING
+ !it_results TYPE zif_abapgit_definitions=>ty_results_tt
+ !ii_log TYPE REF TO zif_abapgit_log OPTIONAL
+ RETURNING
+ VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt .
+ CLASS-METHODS prioritize_deser
+ IMPORTING
+ !ii_log TYPE REF TO zif_abapgit_log
+ !it_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RETURNING
+ VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt .
+ CLASS-METHODS map_results_to_items
+ IMPORTING
+ !it_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RETURNING
+ VALUE(rt_items) TYPE zif_abapgit_definitions=>ty_items_tt .
+ENDCLASS.
+CLASS zcl_abapgit_filename_logic DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_package_file,
+ obj_name TYPE c LENGTH 7 VALUE 'package',
+ sep1 TYPE c LENGTH 1 VALUE '.',
+ obj_type TYPE c LENGTH 4 VALUE 'devc',
+ sep2 TYPE c LENGTH 1 VALUE '.',
+ extension TYPE c LENGTH 3 VALUE 'xml',
+ END OF c_package_file.
+
+ CONSTANTS:
+ BEGIN OF c_json_file,
+ extension TYPE c LENGTH 4 VALUE 'json',
+ END OF c_json_file.
+
+ CLASS-METHODS detect_obj_definition
+ IMPORTING
+ !iv_type TYPE string
+ !iv_ext TYPE string
+ EXPORTING
+ !ev_is_xml TYPE abap_bool
+ !ev_is_json TYPE abap_bool.
+
+ CLASS-METHODS is_obj_definition_file
+ IMPORTING
+ !iv_filename TYPE string
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+
+ CLASS-METHODS file_to_object
+ IMPORTING
+ !iv_filename TYPE string
+ !iv_path TYPE string
+ !iv_devclass TYPE devclass OPTIONAL
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ EXPORTING
+ !es_item TYPE zif_abapgit_definitions=>ty_item
+ !ev_is_xml TYPE abap_bool
+ !ev_is_json TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS i18n_file_to_object
+ IMPORTING
+ !iv_filename TYPE string
+ !iv_path TYPE string
+ EXPORTING
+ !es_item TYPE zif_abapgit_definitions=>ty_item
+ !ev_lang TYPE laiso
+ !ev_ext TYPE string
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS object_to_file
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_ext TYPE string
+ !iv_extra TYPE clike OPTIONAL
+ RETURNING
+ VALUE(rv_filename) TYPE string .
+
+ CLASS-METHODS object_to_i18n_file
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_lang_suffix TYPE string
+ !iv_ext TYPE string
+ RETURNING
+ VALUE(rv_filename) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-METHODS name_escape
+ IMPORTING
+ !iv_name TYPE csequence
+ RETURNING
+ VALUE(rv_name) TYPE string.
+
+ CLASS-METHODS name_unescape
+ IMPORTING
+ !iv_name TYPE csequence
+ RETURNING
+ VALUE(rv_name) TYPE string.
+
+ CLASS-METHODS map_filename_to_object
+ IMPORTING
+ !iv_item_part_of_filename TYPE string
+ !iv_path TYPE string
+ !iv_package TYPE devclass
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ CHANGING
+ cs_item TYPE zif_abapgit_definitions=>ty_item
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS map_object_to_filename
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_ext TYPE string
+ !iv_extra TYPE clike
+ CHANGING
+ cv_item_part_of_filename TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS get_lang_and_ext
+ IMPORTING
+ iv_filename TYPE string
+ EXPORTING
+ ev_lang TYPE laiso
+ ev_ext TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_folder_logic DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS package_to_path
+ IMPORTING
+ !iv_top TYPE devclass
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ !iv_package TYPE devclass
+ RETURNING
+ VALUE(rv_path) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS path_to_package
+ IMPORTING
+ !iv_top TYPE devclass
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ !iv_path TYPE string
+ !iv_create_if_not_exists TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rv_package) TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_instance
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_folder_logic .
+ PROTECTED SECTION.
+
+ METHODS get_parent
+ IMPORTING
+ !iv_top TYPE devclass
+ !iv_package TYPE devclass
+ RETURNING
+ VALUE(rv_parent) TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_devclass_info,
+ devclass TYPE devclass,
+ namespace TYPE namespace,
+ parentcl TYPE parentcl,
+ END OF ty_devclass_info .
+ TYPES:
+ ty_devclass_info_tt TYPE SORTED TABLE OF ty_devclass_info
+ WITH UNIQUE KEY devclass .
+ DATA mt_top_subpackages TYPE ty_devclass_info_tt .
+ DATA mt_parent TYPE ty_devclass_info_tt .
+ENDCLASS.
+CLASS zcl_abapgit_item_graph DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !it_items TYPE zif_abapgit_definitions=>ty_items_tt .
+ METHODS add_edge
+ IMPORTING
+ !is_from TYPE zif_abapgit_definitions=>ty_item
+ !is_to TYPE zif_abapgit_definitions=>ty_item .
+ METHODS has_vertices
+ RETURNING
+ VALUE(rv_bool) TYPE abap_bool .
+ METHODS get_next
+ IMPORTING
+ !ii_log TYPE REF TO zif_abapgit_log
+ RETURNING
+ VALUE(rs_item) TYPE zif_abapgit_definitions=>ty_item .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_edge,
+ from TYPE zif_abapgit_definitions=>ty_item,
+ to TYPE zif_abapgit_definitions=>ty_item,
+ END OF ty_edge.
+
+ DATA mt_vertices TYPE STANDARD TABLE OF zif_abapgit_definitions=>ty_item WITH DEFAULT KEY.
+ DATA mt_edges TYPE STANDARD TABLE OF ty_edge WITH DEFAULT KEY
+ WITH NON-UNIQUE SORTED KEY sec_to COMPONENTS to
+ WITH NON-UNIQUE SORTED KEY sec_from COMPONENTS from.
+ DATA mv_warning TYPE abap_bool.
+
+ METHODS remove_vertex IMPORTING iv_index TYPE i.
+ENDCLASS.
+CLASS zcl_abapgit_objects_activation DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS add
+ IMPORTING
+ !iv_type TYPE trobjtype
+ !iv_name TYPE clike
+ !iv_delete TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS add_item
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS activate
+ IMPORTING
+ !iv_ddic TYPE abap_bool DEFAULT abap_false
+ !ii_log TYPE REF TO zif_abapgit_log
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS clear .
+ CLASS-METHODS is_ddic_type
+ IMPORTING
+ !iv_obj_type TYPE trobjtype
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool .
+ CLASS-METHODS is_active
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RETURNING
+ VALUE(rv_active) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_classes,
+ object TYPE trobjtype,
+ clsname TYPE seoclsname,
+ END OF ty_classes.
+
+ CONSTANTS:
+ c_domain TYPE c LENGTH 9 VALUE 'DOMA DOMD',
+ c_types TYPE c LENGTH 55 VALUE 'DTEL DTED TABL TABD SQLT SQLD TTYP TTYD VIEW VIED DRTY',
+ c_technset TYPE c LENGTH 24 VALUE 'TABT VIET SQTT INDX XINX',
+ c_f4_objects TYPE c LENGTH 35 VALUE 'SHLP SHLD MCOB MCOD MACO MACD MCID',
+ c_enqueue TYPE c LENGTH 9 VALUE 'ENQU ENQD',
+ c_sqsc TYPE c LENGTH 4 VALUE 'SQSC',
+ c_stob TYPE c LENGTH 4 VALUE 'STOB',
+ c_ntab TYPE c LENGTH 14 VALUE 'NTTT NTTB NTDT',
+ c_ddls TYPE c LENGTH 24 VALUE 'DDLS DRUL DTDC DTEB',
+ c_switches TYPE c LENGTH 24 VALUE 'SF01 SF02 SFSW SFBS SFBF',
+ c_para TYPE c LENGTH 4 VALUE 'PARA', " can be referenced by DTEL
+ c_enhd TYPE c LENGTH 4 VALUE 'ENHD',
+ c_scalarfunc TYPE c LENGTH 9 VALUE 'DSFD DSFI',
+ c_aspect TYPE c LENGTH 4 VALUE 'DRAS'.
+
+ CLASS-DATA:
+ gt_classes TYPE STANDARD TABLE OF ty_classes WITH DEFAULT KEY .
+ CLASS-DATA:
+ gt_objects TYPE TABLE OF dwinactiv .
+
+ CLASS-METHODS update_where_used
+ IMPORTING
+ !ii_log TYPE REF TO zif_abapgit_log.
+ CLASS-METHODS use_new_activation_logic
+ RETURNING
+ VALUE(rv_use_new_activation_logic) TYPE abap_bool .
+ CLASS-METHODS activate_new
+ IMPORTING
+ !iv_ddic TYPE abap_bool DEFAULT abap_false
+ !ii_log TYPE REF TO zif_abapgit_log
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS activate_old
+ IMPORTING
+ !iv_ddic TYPE abap_bool DEFAULT abap_false
+ !ii_log TYPE REF TO zif_abapgit_log
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS activate_ddic
+ IMPORTING
+ !ii_log TYPE REF TO zif_abapgit_log
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS add_errors_and_warnings_to_log
+ IMPORTING
+ !iv_logname TYPE ddmass-logname
+ !ii_log TYPE REF TO zif_abapgit_log
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS add_activation_errors_to_log
+ IMPORTING
+ !io_checklist TYPE REF TO cl_wb_checklist
+ !ii_log TYPE REF TO zif_abapgit_log
+ RETURNING
+ VALUE(rv_try_again) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS is_non_ddic_active
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RETURNING
+ VALUE(rv_active) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS is_ddic_active
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RETURNING
+ VALUE(rv_active) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_ddic_type
+ IMPORTING
+ !iv_obj_type TYPE clike
+ !iv_obj_name TYPE clike
+ EXPORTING
+ !ev_type TYPE ddobjtyp
+ !ev_name TYPE ddobjname
+ !ev_id TYPE ddobjectid
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_objects_check DEFINITION
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS class_constructor.
+
+ CLASS-METHODS deserialize_checks
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS checks_adjust
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ CHANGING
+ !ct_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gi_exit TYPE REF TO zif_abapgit_exit.
+
+ CLASS-METHODS adjust_result
+ IMPORTING
+ !iv_txt TYPE string
+ !it_overwrite_old TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ !it_overwrite_new TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ CHANGING
+ !ct_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS warning_overwrite_adjust
+ IMPORTING
+ !it_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ CHANGING
+ !ct_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS warning_overwrite_find
+ IMPORTING
+ !it_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RETURNING
+ VALUE(rt_overwrite) TYPE zif_abapgit_definitions=>ty_overwrite_tt.
+
+ CLASS-METHODS warning_package_adjust
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !it_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ CHANGING
+ !ct_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS warning_package_find
+ IMPORTING
+ !it_results TYPE zif_abapgit_definitions=>ty_results_tt
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(rt_overwrite) TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS warning_data_loss_adjust
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !it_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ CHANGING
+ !ct_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS warning_data_loss_find
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !it_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RETURNING
+ VALUE(rt_overwrite) TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS determine_transport_request
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ iv_transport_type TYPE zif_abapgit_definitions=>ty_transport_type
+ RETURNING
+ VALUE(rv_transport_request) TYPE trkorr.
+
+ CLASS-METHODS check_multiple_files
+ IMPORTING
+ !it_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_objects_compare DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get_comparator
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ RETURNING
+ VALUE(ri_comparator) TYPE REF TO zif_abapgit_comparator.
+
+ CLASS-METHODS get_result
+ IMPORTING
+ ii_comparator TYPE REF TO zif_abapgit_comparator
+ iv_filename TYPE string
+ it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ it_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RETURNING
+ VALUE(rv_result) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_objects_files DEFINITION
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS new
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_path TYPE string OPTIONAL
+ RETURNING
+ VALUE(ro_files) TYPE REF TO zcl_abapgit_objects_files.
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_path TYPE string OPTIONAL .
+ METHODS add_string
+ IMPORTING
+ !iv_extra TYPE clike OPTIONAL
+ !iv_ext TYPE string
+ !iv_string TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_string
+ IMPORTING
+ !iv_extra TYPE clike OPTIONAL
+ !iv_ext TYPE string
+ RETURNING
+ VALUE(rv_string) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_xml
+ IMPORTING
+ !iv_extra TYPE clike OPTIONAL
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !iv_normalize TYPE abap_bool DEFAULT abap_true
+ !is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_xml
+ IMPORTING
+ !iv_extra TYPE clike OPTIONAL
+ RETURNING
+ VALUE(ri_xml) TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_abap
+ IMPORTING
+ !iv_extra TYPE clike OPTIONAL
+ !iv_error TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rt_abap) TYPE abaptxt255_tab
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_abap
+ IMPORTING
+ !iv_extra TYPE clike OPTIONAL
+ !it_abap TYPE STANDARD TABLE
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add
+ IMPORTING
+ !is_file TYPE zif_abapgit_git_definitions=>ty_file .
+ METHODS add_raw
+ IMPORTING
+ !iv_extra TYPE clike OPTIONAL
+ !iv_ext TYPE string
+ !iv_data TYPE xstring.
+ METHODS read_raw
+ IMPORTING
+ !iv_extra TYPE clike OPTIONAL
+ !iv_ext TYPE string
+ RETURNING
+ VALUE(rv_data) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_files
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_git_definitions=>ty_files_tt .
+ METHODS set_files
+ IMPORTING
+ !it_files TYPE zif_abapgit_git_definitions=>ty_files_tt .
+ METHODS get_accessed_files
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt .
+ METHODS contains_file
+ IMPORTING
+ !iv_extra TYPE clike OPTIONAL
+ !iv_ext TYPE string
+ RETURNING
+ VALUE(rv_present) TYPE abap_bool .
+ METHODS get_file_pattern
+ RETURNING
+ VALUE(rv_pattern) TYPE string .
+ METHODS is_json_metadata
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+ METHODS add_i18n_file
+ IMPORTING
+ !ii_i18n_file TYPE REF TO zif_abapgit_i18n_file
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_i18n_files
+ RETURNING
+ VALUE(rt_i18n_files) TYPE zif_abapgit_i18n_file=>ty_table_of
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+
+ METHODS read_file
+ IMPORTING
+ !iv_filename TYPE string
+ !iv_error TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rv_data) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+
+ DATA ms_item TYPE zif_abapgit_definitions=>ty_item .
+ DATA mt_accessed_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt .
+ DATA mt_files TYPE zif_abapgit_git_definitions=>ty_files_tt .
+ DATA mv_path TYPE string .
+
+ METHODS mark_accessed
+ IMPORTING
+ !iv_path TYPE zif_abapgit_git_definitions=>ty_file-path
+ !iv_file TYPE zif_abapgit_git_definitions=>ty_file-filename
+ !iv_sha1 TYPE zif_abapgit_git_definitions=>ty_file-sha1.
+
+ENDCLASS.
+CLASS zcl_abapgit_serialize DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !io_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit OPTIONAL
+ !is_local_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS on_end_of_task
+ IMPORTING
+ !p_task TYPE clike ##NEEDED.
+ METHODS serialize
+ IMPORTING
+ !iv_package TYPE devclass OPTIONAL
+ !it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ !ii_log TYPE REF TO zif_abapgit_log OPTIONAL
+ !iv_force_sequential TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS files_local
+ IMPORTING
+ !iv_package TYPE devclass
+ !ii_log TYPE REF TO zif_abapgit_log
+ !it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt OPTIONAL
+ !ii_data_config TYPE REF TO zif_abapgit_data_config OPTIONAL
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+
+ TYPES:
+ BEGIN OF ty_unsupported_count,
+ obj_type TYPE tadir-object,
+ obj_name TYPE tadir-obj_name,
+ count TYPE i,
+ END OF ty_unsupported_count .
+ TYPES:
+ ty_unsupported_count_tt TYPE HASHED TABLE OF ty_unsupported_count WITH UNIQUE KEY obj_type .
+ TYPES:
+ ty_char32 TYPE c LENGTH 32 .
+
+ CLASS-DATA gv_max_processes TYPE i .
+ DATA mt_files TYPE zif_abapgit_definitions=>ty_files_item_tt .
+ DATA mv_free TYPE i .
+ DATA mi_log TYPE REF TO zif_abapgit_log .
+ DATA mv_group TYPE rzlli_apcl .
+ DATA mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit.
+ DATA ms_local_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings.
+ DATA ms_i18n_params TYPE zif_abapgit_definitions=>ty_i18n_params.
+ DATA mo_abap_language_version TYPE REF TO zcl_abapgit_abap_language_vers.
+ DATA mt_wo_translation_patterns TYPE string_table.
+
+ METHODS add_apack
+ IMPORTING
+ !iv_package TYPE devclass
+ CHANGING
+ !ct_files TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_data
+ IMPORTING
+ !ii_data_config TYPE REF TO zif_abapgit_data_config
+ CHANGING
+ !ct_files TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_dot_abapgit
+ CHANGING
+ !ct_files TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_to_return
+ IMPORTING
+ !iv_path TYPE string
+ !is_file_item TYPE zif_abapgit_objects=>ty_serialization .
+ METHODS run_parallel
+ IMPORTING
+ !is_tadir TYPE zif_abapgit_definitions=>ty_tadir
+ !iv_task TYPE ty_char32
+ RAISING
+ zcx_abapgit_exception .
+ METHODS run_sequential
+ IMPORTING
+ !is_tadir TYPE zif_abapgit_definitions=>ty_tadir
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_objects
+ IMPORTING
+ !iv_package TYPE devclass
+ !ii_log TYPE REF TO zif_abapgit_log
+ !it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt OPTIONAL
+ CHANGING
+ VALUE(ct_files) TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS determine_rfc_server_group
+ RETURNING
+ VALUE(rv_group) TYPE rzlli_apcl
+ RAISING
+ zcx_abapgit_exception.
+ METHODS determine_max_processes
+ IMPORTING
+ !iv_force_sequential TYPE abap_bool DEFAULT abap_false
+ iv_package TYPE devclass
+ RETURNING
+ VALUE(rv_processes) TYPE i
+ RAISING
+ zcx_abapgit_exception .
+ METHODS filter_unsupported_objects
+ CHANGING
+ !ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt .
+ METHODS filter_ignored_objects
+ IMPORTING
+ !iv_package TYPE devclass
+ CHANGING
+ !ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+
+ METHODS is_parallelization_possible
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+
+ METHODS is_no_parallel
+ IMPORTING
+ !iv_object_type TYPE tadir-object
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+
+ENDCLASS.
+CLASS zcl_abapgit_tadir DEFINITION
+ FINAL
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_factory .
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_tadir .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS check_exists
+ IMPORTING
+ !it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RETURNING
+ VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS build
+ IMPORTING
+ !iv_package TYPE tadir-devclass
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ !iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
+ !iv_only_local_objects TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS select_objects
+ IMPORTING
+ !iv_package TYPE tadir-devclass
+ !iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
+ !iv_only_local_objects TYPE abap_bool
+ EXPORTING
+ !et_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt
+ !et_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_local_packages
+ IMPORTING
+ !it_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt
+ CHANGING
+ !ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_namespaces
+ IMPORTING
+ !iv_package TYPE devclass
+ CHANGING
+ !ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_namespace
+ IMPORTING
+ !iv_package TYPE devclass
+ !iv_object TYPE csequence
+ CHANGING
+ !ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ !ct_tadir_nspc TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS determine_path
+ IMPORTING
+ !iv_package TYPE tadir-devclass
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ CHANGING
+ !ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_config_downl DEFINITION
+ INHERITING FROM cl_apl_ecatt_config_download
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_download.
+
+ METHODS:
+ download REDEFINITION.
+
+ PROTECTED SECTION.
+ METHODS:
+ download_data REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA:
+ mv_xml_stream TYPE xstring.
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_config_upl DEFINITION
+ INHERITING FROM cl_apl_ecatt_config_upload
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_upload.
+
+ PROTECTED SECTION.
+ METHODS:
+ upload_data_from_stream REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA: mv_external_xml TYPE xstring.
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_data_downl DEFINITION
+ INHERITING FROM cl_apl_ecatt_data_download
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_download.
+
+ METHODS:
+ download
+ REDEFINITION.
+
+ PROTECTED SECTION.
+ METHODS:
+ download_data REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA:
+ mv_xml_stream TYPE xstring.
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_data_upload DEFINITION
+ INHERITING FROM cl_apl_ecatt_data_upload
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_upload.
+
+ METHODS upload REDEFINITION.
+
+ PROTECTED SECTION.
+ METHODS:
+ upload_data_from_stream REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA: mv_external_xml TYPE xstring,
+ BEGIN OF ms_current_object,
+ s_obj_type TYPE etobj_type,
+ d_obj_name TYPE etobjdname,
+ d_obj_ver TYPE etobjdver,
+ END OF ms_current_object,
+ mx_ecatt_apl TYPE REF TO cx_ecatt_apl.
+ METHODS on_ev_object_saved FOR EVENT ev_object_saved OF cl_apl_ecatt_object IMPORTING ex_ecatt_object.
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_helper DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ CLASS-METHODS:
+ build_xml_of_object
+ IMPORTING
+ iv_object_name TYPE etobj_name
+ iv_object_version TYPE etobj_ver
+ iv_object_type TYPE etobj_type
+ io_download TYPE REF TO cl_apl_ecatt_download
+ RETURNING
+ VALUE(rv_xml_stream) TYPE xstring
+ RAISING
+ zcx_abapgit_exception,
+
+ download_data
+ IMPORTING
+ ii_template_over_all TYPE REF TO if_ixml_document
+ RETURNING
+ VALUE(rv_xml_stream) TYPE xstring,
+
+ upload_data_from_stream
+ IMPORTING
+ iv_xml_stream TYPE xstring
+ RETURNING
+ VALUE(ri_template_over_all) TYPE REF TO if_ixml_document
+ RAISING
+ cx_ecatt_apl.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS:
+ c_xml TYPE i VALUE 1. " downport of if_apl_ecatt_xml=>co_xml
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_script_downl DEFINITION
+ INHERITING FROM cl_apl_ecatt_script_download
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_download.
+
+ METHODS:
+ download REDEFINITION.
+
+ PROTECTED SECTION.
+ METHODS:
+ download_data REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA:
+ mv_xml_stream TYPE xstring,
+ mi_script_node TYPE REF TO if_ixml_element.
+
+ METHODS:
+ set_script_to_template
+ RAISING
+ cx_ecatt_apl,
+
+ set_control_data_for_tcd
+ IMPORTING
+ is_param TYPE etpar_gui
+ io_params TYPE REF TO cl_apl_ecatt_params
+ RAISING
+ cx_ecatt_apl,
+
+ escape_control_data
+ IMPORTING
+ ii_element TYPE REF TO if_ixml_element
+ iv_tabname TYPE string
+ iv_node TYPE string
+ RAISING
+ cx_ecatt_apl,
+
+ set_blob_to_template
+ RAISING
+ cx_ecatt_apl,
+
+ set_artmp_to_template
+ RAISING
+ cx_ecatt_apl.
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_script_upl DEFINITION
+ INHERITING FROM cl_apl_ecatt_script_upload
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_upload.
+
+ PROTECTED SECTION.
+ METHODS:
+ upload_data_from_stream REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA: mv_external_xml TYPE xstring.
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_sp_download DEFINITION
+ INHERITING FROM cl_apl_ecatt_download
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_download.
+
+ METHODS:
+ download REDEFINITION.
+
+ PROTECTED SECTION.
+ METHODS:
+ download_data REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA:
+ mv_xml_stream TYPE xstring.
+
+ METHODS:
+ set_sp_data_to_template.
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_sp_upload DEFINITION
+ INHERITING FROM cl_apl_ecatt_upload
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_upload.
+
+ METHODS:
+ upload
+ REDEFINITION.
+
+ PROTECTED SECTION.
+ METHODS:
+ upload_data_from_stream REDEFINITION,
+
+ get_ecatt_sp
+ RAISING
+ cx_ecatt_apl .
+
+ PRIVATE SECTION.
+ DATA: mv_external_xml TYPE xstring.
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_system_downl DEFINITION
+ INHERITING FROM cl_apl_ecatt_systems_download
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_download.
+
+ METHODS:
+ download REDEFINITION.
+
+ PROTECTED SECTION.
+ METHODS:
+ download_data REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA:
+ mv_xml_stream TYPE xstring.
+
+ METHODS:
+ set_systems_data_to_template.
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_system_upl DEFINITION
+ INHERITING FROM cl_apl_ecatt_systems_upload
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_upload.
+
+ PROTECTED SECTION.
+ METHODS:
+ upload_data_from_stream REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA: mv_external_xml TYPE xstring.
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_val_obj_down DEFINITION
+ INHERITING FROM cl_apl_ecatt_download
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_download.
+
+ METHODS:
+ download REDEFINITION.
+
+ PROTECTED SECTION.
+ DATA:
+ mi_objects_node TYPE REF TO if_ixml_element.
+
+ METHODS:
+ download_data REDEFINITION.
+
+ PRIVATE SECTION.
+ DATA:
+ mv_xml_stream TYPE xstring.
+
+ METHODS:
+ set_ecatt_impl_detail,
+ set_ecatt_flags,
+ set_business_msgs.
+
+ENDCLASS.
+CLASS zcl_abapgit_ecatt_val_obj_upl DEFINITION
+ INHERITING FROM cl_apl_ecatt_upload
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_ecatt_upload.
+
+ METHODS:
+ upload REDEFINITION.
+
+ PROTECTED SECTION.
+ METHODS:
+ upload_data_from_stream REDEFINITION,
+
+ get_business_msgs_from_dom
+ RAISING
+ cx_ecatt_apl,
+
+ get_impl_detail_from_dom
+ RAISING
+ cx_ecatt_apl,
+
+ get_vo_flags_from_dom
+ RAISING
+ cx_ecatt_apl.
+
+ PRIVATE SECTION.
+ DATA:
+ mv_external_xml TYPE xstring.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enho_badi DEFINITION.
+
+ PUBLIC SECTION.
+ METHODS: constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item.
+ INTERFACES: zif_abapgit_object_enho.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enho_class DEFINITION
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object_enho.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !io_files TYPE REF TO zcl_abapgit_objects_files.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CLASS-METHODS adjust_generated_comments
+ CHANGING
+ ct_source TYPE rswsourcet.
+ METHODS:
+ serialize_includes
+ IMPORTING
+ io_class TYPE REF TO cl_enh_tool_class
+ RAISING
+ zcx_abapgit_exception,
+ deserialize_includes
+ IMPORTING
+ ii_xml TYPE REF TO zif_abapgit_xml_input
+ io_class TYPE REF TO cl_enh_tool_class
+ RAISING
+ zcx_abapgit_exception.
+
+ DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
+ DATA: mo_files TYPE REF TO zcl_abapgit_objects_files.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enho_clif DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS deserialize
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ !io_clif TYPE REF TO cl_enh_tool_clif
+ RAISING
+ zcx_abapgit_exception
+ cx_enh_root .
+ CLASS-METHODS serialize
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output
+ !io_clif TYPE REF TO cl_enh_tool_clif
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enho_fugr DEFINITION.
+
+ PUBLIC SECTION.
+ METHODS: constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ io_files TYPE REF TO zcl_abapgit_objects_files.
+ INTERFACES: zif_abapgit_object_enho.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: ms_item TYPE zif_abapgit_definitions=>ty_item,
+ mo_files TYPE REF TO zcl_abapgit_objects_files.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enho_hook DEFINITION.
+ PUBLIC SECTION.
+ METHODS: constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ io_files TYPE REF TO zcl_abapgit_objects_files.
+
+ INTERFACES: zif_abapgit_object_enho.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_spaces,
+ full_name TYPE string,
+ spaces TYPE STANDARD TABLE OF i WITH DEFAULT KEY,
+ END OF ty_spaces.
+
+ TYPES: ty_spaces_tt TYPE STANDARD TABLE OF ty_spaces WITH DEFAULT KEY.
+
+ TYPES: BEGIN OF ty_file,
+ name TYPE string,
+ file TYPE string,
+ END OF ty_file.
+
+ TYPES: ty_files TYPE HASHED TABLE OF ty_file WITH UNIQUE KEY name.
+
+ CONSTANTS c_enhancement TYPE string VALUE 'ENHANCEMENT 0 *.' ##NO_TEXT.
+ CONSTANTS c_endenhancement TYPE string VALUE 'ENDENHANCEMENT.' ##NO_TEXT.
+
+ DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
+ DATA: mo_files TYPE REF TO zcl_abapgit_objects_files.
+
+ METHODS add_sources
+ CHANGING
+ !ct_enhancements TYPE enh_hook_impl_it
+ !ct_files TYPE ty_files
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_sources
+ CHANGING
+ !ct_enhancements TYPE enh_hook_impl_it
+ !ct_files TYPE ty_files
+ RAISING
+ zcx_abapgit_exception .
+ METHODS hook_impl_deserialize
+ IMPORTING
+ !it_spaces TYPE ty_spaces_tt
+ CHANGING
+ !ct_impl TYPE enh_hook_impl_it
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_enho_intf DEFINITION.
+
+ PUBLIC SECTION.
+ METHODS:
+ constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ io_files TYPE REF TO zcl_abapgit_objects_files.
+ INTERFACES: zif_abapgit_object_enho.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: ms_item TYPE zif_abapgit_definitions=>ty_item,
+ mo_files TYPE REF TO zcl_abapgit_objects_files.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enho_wdyc DEFINITION.
+
+ PUBLIC SECTION.
+ METHODS: constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item.
+ INTERFACES: zif_abapgit_object_enho.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enho_wdyn DEFINITION.
+
+ PUBLIC SECTION.
+ METHODS: constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item.
+ INTERFACES: zif_abapgit_object_enho.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: ms_item TYPE zif_abapgit_definitions=>ty_item.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enhs_badi_d DEFINITION.
+
+ PUBLIC SECTION.
+ INTERFACES: zif_abapgit_object_enhs.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_enhs_hook_d DEFINITION.
+
+ PUBLIC SECTION.
+ INTERFACES: zif_abapgit_object_enhs.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_hook_defifnition,
+ pgmid TYPE tadir-pgmid,
+ obj_name TYPE trobj_name,
+ obj_type TYPE trobjtype,
+ main_type TYPE trobjtype,
+ main_name TYPE eu_aname,
+ program TYPE progname,
+ def_hooks TYPE enh_hook_def_ext_it,
+ END OF ty_hook_defifnition.
+
+ENDCLASS.
+CLASS zcl_abapgit_adt_link DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS jump
+ IMPORTING
+ !iv_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name
+ !iv_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type
+ !iv_sub_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name OPTIONAL
+ !iv_line_number TYPE i OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS link_transport
+ IMPORTING
+ iv_transport TYPE trkorr
+ RETURNING
+ VALUE(rv_link) TYPE string.
+
+ PROTECTED SECTION.
+
+ CLASS-METHODS generate
+ IMPORTING
+ !iv_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name
+ !iv_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type
+ !iv_sub_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name OPTIONAL
+ !iv_line_number TYPE i OPTIONAL
+ RETURNING
+ VALUE(rv_result) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+
+ CLASS-METHODS get_adt_objects_and_names
+ IMPORTING
+ iv_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name
+ iv_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type
+ EXPORTING
+ eo_adt_uri_mapper TYPE REF TO object
+ eo_adt_objectref TYPE REF TO object
+ ev_program TYPE progname
+ ev_include TYPE progname
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS is_adt_jump_possible
+ IMPORTING
+ io_object TYPE REF TO cl_wb_object
+ io_adt TYPE REF TO object
+ RETURNING
+ VALUE(rv_is_adt_jump_possible) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_jumper DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_jumper.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS jump_tr
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RETURNING
+ VALUE(rv_exit) TYPE abap_bool.
+
+ METHODS jump_wb
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_new_window TYPE abap_bool
+ RETURNING
+ VALUE(rv_exit) TYPE abap_bool.
+
+ METHODS jump_wb_line
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_sub_obj_name TYPE zif_abapgit_definitions=>ty_item-obj_name
+ !iv_sub_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type
+ !iv_line_number TYPE i
+ !iv_new_window TYPE abap_bool
+ RETURNING
+ VALUE(rv_exit) TYPE abap_bool.
+
+ METHODS jump_bw
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_new_window TYPE abap_bool
+ RETURNING
+ VALUE(rv_exit) TYPE abap_bool.
+
+ENDCLASS.
+CLASS zcl_abapgit_oo_base DEFINITION
+ ABSTRACT
+ CREATE PROTECTED.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_oo_object_fnc .
+ CONSTANTS c_cp_program_type TYPE c LENGTH 1 VALUE 'K'.
+ CONSTANTS c_include_program_type TYPE c LENGTH 1 VALUE 'I'.
+ CONSTANTS c_ip_program_type TYPE c LENGTH 1 VALUE 'J'.
+ PROTECTED SECTION.
+ CLASS-METHODS:
+ convert_attrib_to_vseoattrib
+ IMPORTING iv_clsname TYPE seoclsname
+ it_attributes TYPE zif_abapgit_oo_object_fnc=>ty_obj_attribute_tt
+ RETURNING VALUE(rt_vseoattrib) TYPE seoo_attributes_r.
+
+ PRIVATE SECTION.
+ CONSTANTS c_docu_state_active TYPE dokstate VALUE 'A'. " See include SDOC_CONSTANTS
+
+ DATA mv_skip_test_classes TYPE abap_bool .
+
+ENDCLASS.
+CLASS zcl_abapgit_oo_class DEFINITION
+ INHERITING FROM zcl_abapgit_oo_base
+ CREATE PUBLIC
+ FRIENDS ZCL_abapgit_oo_factory.
+
+ PUBLIC SECTION.
+
+ METHODS zif_abapgit_oo_object_fnc~create
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~create_sotr
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~delete
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~deserialize_source
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~generate_locals
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~get_class_properties
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~get_includes
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~insert_text_pool
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~read_sotr
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~read_text_pool
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~exists
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~syntax_check
+ REDEFINITION .
+ PROTECTED SECTION.
+
+ TYPES:
+ ty_char1 TYPE c LENGTH 1 .
+ TYPES:
+ ty_char2 TYPE c LENGTH 2 .
+ PRIVATE SECTION.
+
+ CLASS-METHODS update_source_index
+ IMPORTING
+ !iv_clsname TYPE csequence
+ !io_scanner TYPE REF TO cl_oo_source_scanner_class .
+ CLASS-METHODS update_report
+ IMPORTING
+ !iv_program TYPE syrepid
+ !it_source TYPE string_table
+ !iv_package TYPE devclass
+ !iv_version TYPE uccheck
+ RETURNING
+ VALUE(rv_updated) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS generate_classpool
+ IMPORTING
+ !iv_name TYPE seoclsname
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS update_meta
+ IMPORTING
+ !iv_name TYPE seoclsname
+ !iv_exposure TYPE seoexpose
+ !it_source TYPE rswsourcet
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS determine_method_include
+ IMPORTING
+ !iv_name TYPE seoclsname
+ !iv_method TYPE seocpdname
+ RETURNING
+ VALUE(rv_program) TYPE syrepid
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS init_scanner
+ IMPORTING
+ !it_source TYPE zif_abapgit_definitions=>ty_string_tt
+ !iv_name TYPE seoclsname
+ RETURNING
+ VALUE(ro_scanner) TYPE REF TO cl_oo_source_scanner_class
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS update_full_class_include
+ IMPORTING
+ !iv_classname TYPE seoclsname
+ !it_source TYPE string_table
+ !it_methods TYPE cl_oo_source_scanner_class=>type_method_implementations
+ !iv_package TYPE devclass
+ !iv_version TYPE uccheck
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS create_report
+ IMPORTING
+ !iv_program TYPE syrepid
+ !it_source TYPE string_table
+ !iv_extension TYPE ty_char2
+ !iv_program_type TYPE ty_char1
+ !iv_state TYPE r3state
+ !iv_package TYPE devclass
+ !iv_version TYPE uccheck
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS update_cs_number_of_methods
+ IMPORTING
+ !iv_classname TYPE seoclsname
+ !iv_number_of_impl_methods TYPE i .
+ CLASS-METHODS delete_report
+ IMPORTING
+ !iv_program TYPE syrepid
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS get_method_includes
+ IMPORTING
+ !iv_classname TYPE seoclsname
+ RETURNING
+ VALUE(rt_includes) TYPE seop_methods_w_include.
+ CLASS-METHODS repair_classpool
+ IMPORTING
+ !is_key TYPE seoclskey
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS repair_redefinitions
+ IMPORTING
+ !is_key TYPE seoclskey
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_oo_factory DEFINITION.
+
+ PUBLIC SECTION.
+ CLASS-METHODS:
+ get_by_type
+ IMPORTING
+ iv_object_type TYPE tadir-object
+ RETURNING
+ VALUE(ri_object_oriented_object) TYPE REF TO zif_abapgit_oo_object_fnc,
+
+ get_by_name
+ IMPORTING
+ iv_object_name TYPE seoclsname
+ RETURNING
+ VALUE(ri_object_oriented_object) TYPE REF TO zif_abapgit_oo_object_fnc
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_oo_interface DEFINITION
+ INHERITING FROM zcl_abapgit_oo_base
+ CREATE PUBLIC
+ FRIENDS ZCL_abapgit_oo_factory.
+
+ PUBLIC SECTION.
+
+ METHODS zif_abapgit_oo_object_fnc~create
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~delete
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~get_includes
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~get_interface_properties
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~deserialize_source
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~exists
+ REDEFINITION .
+ METHODS zif_abapgit_oo_object_fnc~syntax_check
+ REDEFINITION .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-METHODS update_report
+ IMPORTING
+ !iv_program TYPE syrepid
+ !it_source TYPE string_table
+ !iv_package TYPE devclass
+ !iv_version TYPE uccheck
+ RETURNING
+ VALUE(rv_updated) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS update_meta
+ IMPORTING
+ !iv_name TYPE seoclsname
+ !it_source TYPE rswsourcet
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS init_scanner
+ IMPORTING
+ !it_source TYPE zif_abapgit_definitions=>ty_string_tt
+ !iv_name TYPE seoclsname
+ RETURNING
+ VALUE(ro_scanner) TYPE REF TO cl_oo_source_scanner_interface
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_oo_serializer DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS serialize_abap_clif_source
+ IMPORTING
+ !is_class_key TYPE seoclskey
+ RETURNING
+ VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt
+ RAISING
+ zcx_abapgit_exception
+ cx_sy_dyn_call_error .
+ METHODS are_test_classes_skipped
+ RETURNING
+ VALUE(rv_return) TYPE abap_bool .
+ METHODS serialize_locals_imp
+ IMPORTING
+ !is_clskey TYPE seoclskey
+ RETURNING
+ VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_locals_def
+ IMPORTING
+ !is_clskey TYPE seoclskey
+ RETURNING
+ VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_testclasses
+ IMPORTING
+ !is_clskey TYPE seoclskey
+ RETURNING
+ VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_macros
+ IMPORTING
+ !is_clskey TYPE seoclskey
+ RETURNING
+ VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_skip_testclass TYPE abap_bool .
+
+ METHODS calculate_skip_testclass
+ IMPORTING
+ !it_source TYPE zif_abapgit_definitions=>ty_string_tt
+ RETURNING
+ VALUE(rv_skip_testclass) TYPE abap_bool .
+ METHODS serialize_abap_old
+ IMPORTING
+ !is_clskey TYPE seoclskey
+ RETURNING
+ VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_abap_new
+ IMPORTING
+ !is_clskey TYPE seoclskey
+ RETURNING
+ VALUE(rt_source) TYPE zif_abapgit_definitions=>ty_string_tt
+ RAISING
+ zcx_abapgit_exception
+ cx_sy_dyn_call_error .
+ METHODS remove_signatures
+ CHANGING
+ !ct_source TYPE zif_abapgit_definitions=>ty_string_tt .
+ METHODS read_include
+ IMPORTING
+ !is_clskey TYPE seoclskey
+ !iv_type TYPE seop_include_ext_app
+ RETURNING
+ VALUE(rt_source) TYPE seop_source_string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS reduce
+ CHANGING
+ !ct_source TYPE zif_abapgit_definitions=>ty_string_tt .
+ENDCLASS.
+CLASS zcl_abapgit_field_rules DEFINITION
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_field_rules.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_item,
+ tabname TYPE tabname,
+ fieldname TYPE fieldname,
+ fill_rule TYPE zif_abapgit_field_rules=>ty_fill_rule,
+ END OF ty_item,
+ ty_items TYPE SORTED TABLE OF ty_item WITH UNIQUE KEY tabname fieldname.
+
+ DATA mt_item TYPE ty_items.
+
+ METHODS fill_value
+ IMPORTING
+ iv_rule TYPE zif_abapgit_field_rules=>ty_fill_rule
+ iv_package TYPE devclass
+ iv_abap_language_version TYPE uccheck OPTIONAL
+ CHANGING
+ cv_value TYPE any.
+
+ENDCLASS.
+CLASS zcl_abapgit_function_module DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_function_module.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_sap_namespace DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_sap_namespace.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_sap_package DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_factory .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_sap_package .
+
+ METHODS constructor
+ IMPORTING
+ !iv_package TYPE devclass .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mv_package TYPE devclass.
+ENDCLASS.
+CLASS zcl_abapgit_sap_report DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_sap_report.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS authorization_check
+ IMPORTING
+ iv_mode TYPE csequence
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_tabl_compar DEFINITION
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_comparator.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item.
+
+ PROTECTED SECTION.
+
+ TYPES:
+ ty_founds TYPE STANDARD TABLE OF rsfindlst
+ WITH NON-UNIQUE DEFAULT KEY.
+ TYPES:
+ ty_seu_obj TYPE STANDARD TABLE OF seu_obj
+ WITH NON-UNIQUE DEFAULT KEY.
+
+ DATA ms_item TYPE zif_abapgit_definitions=>ty_item.
+
+ METHODS get_where_used_recursive
+ IMPORTING
+ !iv_object_name TYPE csequence
+ !iv_depth TYPE i
+ !iv_object_type TYPE euobj-id
+ !it_scope TYPE ty_seu_obj
+ RETURNING
+ VALUE(rt_founds_all) TYPE ty_founds
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS is_structure_used_in_db_table
+ IMPORTING
+ !iv_object_name TYPE dd02v-tabname
+ RETURNING
+ VALUE(rv_is_structure_used_in_db_tab) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS validate
+ IMPORTING
+ !ii_remote_version TYPE REF TO zif_abapgit_xml_input
+ !ii_local_version TYPE REF TO zif_abapgit_xml_input
+ !ii_log TYPE REF TO zif_abapgit_log
+ RETURNING
+ VALUE(rv_message) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_tabl_ddl DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS read_data
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rs_data) TYPE zif_abapgit_object_tabl=>ty_internal .
+ METHODS serialize
+ IMPORTING
+ !is_data TYPE zif_abapgit_object_tabl=>ty_internal
+ RETURNING
+ VALUE(rv_ddl) TYPE string .
+ METHODS deserialize
+ IMPORTING
+ !iv_ddl TYPE string
+ RETURNING
+ VALUE(rs_data) TYPE zif_abapgit_object_tabl=>ty_internal .
+ METHODS serialize_adt
+ IMPORTING
+ !iv_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_ddl) TYPE string
+ RAISING
+ cx_static_check .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS parse_top_annotations
+ CHANGING
+ !cs_data TYPE zif_abapgit_object_tabl=>ty_internal
+ !cv_ddl TYPE string .
+ METHODS parse_field_annotations
+ EXPORTING
+ !es_dd08v TYPE dd08v
+ CHANGING
+ !cv_ddl TYPE string .
+ METHODS parse_field
+ IMPORTING
+ !iv_field TYPE string
+ CHANGING
+ !cs_data TYPE zif_abapgit_object_tabl=>ty_internal .
+ METHODS serialize_top
+ IMPORTING
+ !is_data TYPE zif_abapgit_object_tabl=>ty_internal
+ RETURNING
+ VALUE(rv_ddl) TYPE string .
+ METHODS serialize_extend
+ IMPORTING
+ !is_dd03p TYPE dd03p
+ !is_data TYPE zif_abapgit_object_tabl=>ty_internal
+ RETURNING
+ VALUE(rv_ddl) TYPE string .
+ METHODS serialize_field_annotations
+ IMPORTING
+ !iv_fieldname TYPE clike
+ !is_data TYPE zif_abapgit_object_tabl=>ty_internal
+ RETURNING
+ VALUE(rv_ddl) TYPE string .
+ METHODS serialize_fkey_annotations
+ IMPORTING
+ !iv_fieldname TYPE clike
+ !is_data TYPE zif_abapgit_object_tabl=>ty_internal
+ RETURNING
+ VALUE(rv_ddl) TYPE string .
+ METHODS serialize_field_foreign_key
+ IMPORTING
+ !iv_fieldname TYPE clike
+ !is_data TYPE zif_abapgit_object_tabl=>ty_internal
+ RETURNING
+ VALUE(rv_ddl) TYPE string .
+ METHODS serialize_value_help
+ IMPORTING
+ !iv_fieldname TYPE clike
+ !is_data TYPE zif_abapgit_object_tabl=>ty_internal
+ RETURNING
+ VALUE(rv_ddl) TYPE string .
+ METHODS escape_string
+ IMPORTING
+ !iv_string TYPE clike
+ RETURNING
+ VALUE(rv_string) TYPE string .
+ METHODS unescape_string
+ IMPORTING
+ !iv_string TYPE clike
+ RETURNING
+ VALUE(rv_string) TYPE string .
+ METHODS serialize_type
+ IMPORTING
+ !is_dd03p TYPE dd03p
+ RETURNING
+ VALUE(rv_type) TYPE string .
+ METHODS parse_type
+ IMPORTING
+ !iv_token TYPE string
+ CHANGING
+ !cs_dd03p TYPE dd03p .
+ENDCLASS.
+CLASS zcl_abapgit_i18n_params DEFINITION
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ DATA ms_params TYPE zif_abapgit_definitions=>ty_i18n_params READ-ONLY .
+
+ CLASS-METHODS new
+ IMPORTING
+ !iv_main_language TYPE spras DEFAULT zif_abapgit_definitions=>c_english
+ !iv_main_language_only TYPE abap_bool DEFAULT abap_false
+ !it_translation_langs TYPE zif_abapgit_definitions=>ty_languages OPTIONAL
+ !iv_use_lxe TYPE abap_bool DEFAULT abap_false
+ !is_params TYPE zif_abapgit_definitions=>ty_i18n_params OPTIONAL
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_i18n_params.
+ METHODS constructor
+ IMPORTING
+ !iv_main_language TYPE spras DEFAULT zif_abapgit_definitions=>c_english
+ !iv_main_language_only TYPE abap_bool DEFAULT abap_false
+ !it_translation_langs TYPE zif_abapgit_definitions=>ty_languages OPTIONAL
+ !iv_use_lxe TYPE abap_bool DEFAULT abap_false
+ !is_params TYPE zif_abapgit_definitions=>ty_i18n_params OPTIONAL.
+
+ METHODS is_lxe_applicable
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+ METHODS build_language_filter
+ RETURNING
+ VALUE(rt_language_filter) TYPE zif_abapgit_environment=>ty_system_language_filter .
+ METHODS trim_saplang_list
+ CHANGING
+ ct_sap_langs TYPE zif_abapgit_definitions=>ty_sap_langu_tab
+ RAISING
+ zcx_abapgit_exception.
+ METHODS trim_saplang_keyed_table
+ IMPORTING
+ iv_lang_field_name TYPE abap_compname
+ iv_keep_master_lang TYPE abap_bool DEFAULT abap_false "sy-langu OPTIONAL
+ CHANGING
+ ct_tab TYPE STANDARD TABLE
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS normalize_obj_patterns
+ IMPORTING
+ it_wo_translation_patterns TYPE string_table
+ RETURNING
+ VALUE(rt_wo_translation_clean) TYPE string_table
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS match_obj_patterns
+ IMPORTING
+ it_wo_translation_patterns TYPE string_table
+ is_tadir TYPE zif_abapgit_definitions=>ty_tadir
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mt_language_filter TYPE zif_abapgit_environment=>ty_system_language_filter.
+
+ CLASS-METHODS iso_langs_to_lang_filter
+ IMPORTING
+ it_iso_filter TYPE zif_abapgit_definitions=>ty_languages
+ RETURNING
+ VALUE(rt_language_filter) TYPE zif_abapgit_environment=>ty_system_language_filter.
+
+ENDCLASS.
+CLASS zcl_abapgit_longtexts DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_factory.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_longtexts.
+
+ PROTECTED SECTION.
+
+ METHODS read
+ IMPORTING
+ !iv_object_name TYPE clike
+ !iv_longtext_id TYPE dokil-id
+ !it_dokil TYPE zif_abapgit_definitions=>ty_dokil_tt
+ !iv_main_lang_only TYPE abap_bool DEFAULT abap_false
+ !iv_clear_fields TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rt_longtexts) TYPE zif_abapgit_longtexts=>ty_longtexts
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+
+ CONSTANTS c_docu_state_active TYPE dokstate VALUE 'A' ##NO_TEXT.
+
+ METHODS escape_name
+ IMPORTING
+ !iv_longtext_id TYPE dokil-id
+ !iv_object_name TYPE clike
+ RETURNING
+ VALUE(rv_object) TYPE dokil-object.
+ENDCLASS.
+CLASS zcl_abapgit_lxe_texts DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_lxe_texts .
+
+ CLASS-METHODS get_translation_languages
+ IMPORTING
+ !iv_main_language TYPE spras
+ !it_i18n_languages TYPE zif_abapgit_definitions=>ty_languages
+ RETURNING
+ VALUE(rt_languages) TYPE zif_abapgit_definitions=>ty_languages
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS get_installed_languages
+ RETURNING
+ VALUE(rt_languages) TYPE zif_abapgit_definitions=>ty_languages
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS convert_lang_string_to_table
+ IMPORTING
+ !iv_langs TYPE string
+ !iv_skip_main_language TYPE spras OPTIONAL
+ RETURNING
+ VALUE(rt_languages) TYPE zif_abapgit_definitions=>ty_languages
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS convert_table_to_lang_string
+ IMPORTING
+ !it_languages TYPE zif_abapgit_definitions=>ty_languages
+ RETURNING
+ VALUE(rv_langs) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS detect_unsupported_languages
+ IMPORTING
+ !it_languages TYPE zif_abapgit_definitions=>ty_languages
+ RETURNING
+ VALUE(rt_unsupported_languages) TYPE zif_abapgit_definitions=>ty_languages
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_custmnr TYPE lxecustmnr VALUE '999999' ##NEEDED.
+ " The value for ABAP system translation is always 999999 (from lxecustmnr docs)
+
+ TYPES:
+ BEGIN OF ty_lxe_lang_map, " extract from LXE_T002X
+ language TYPE lxeisolang,
+ r3_lang TYPE spras,
+ langshort TYPE c LENGTH 2,
+ END OF ty_lxe_lang_map.
+
+ CLASS-DATA gt_lxe_lang_cache TYPE SORTED TABLE OF ty_lxe_lang_map WITH UNIQUE KEY language
+ WITH NON-UNIQUE SORTED KEY iso2 COMPONENTS langshort.
+ " Controversial: we need uniq, but maybe it's better to keep it debuggable
+ " TODO, add r3 key if needed in future
+
+ TYPES:
+ BEGIN OF ty_lxe_translation,
+ source_lang TYPE lxeisolang,
+ target_lang TYPE lxeisolang,
+ custmnr TYPE lxecustmnr,
+ objtype TYPE trobjtype,
+ objname TYPE lxeobjname,
+ text_pairs TYPE zif_abapgit_lxe_texts=>ty_text_pairs,
+ END OF ty_lxe_translation.
+ TYPES:
+ ty_lxe_translations TYPE STANDARD TABLE OF ty_lxe_translation WITH DEFAULT KEY .
+
+ CLASS-DATA gt_installed_languages_cache TYPE zif_abapgit_definitions=>ty_languages.
+
+ DATA mo_i18n_params TYPE REF TO zcl_abapgit_i18n_params.
+ DATA mi_xml_out TYPE REF TO zif_abapgit_xml_output.
+ DATA mi_xml_in TYPE REF TO zif_abapgit_xml_input.
+ DATA mo_files TYPE REF TO zcl_abapgit_objects_files.
+
+ METHODS serialize_xml
+ IMPORTING
+ !iv_lxe_text_name TYPE string DEFAULT 'LXE_TEXTS'
+ !iv_object_type TYPE tadir-object
+ !iv_object_name TYPE tadir-obj_name
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS serialize_as_po
+ IMPORTING
+ !iv_object_type TYPE tadir-object
+ !iv_object_name TYPE tadir-obj_name
+ RAISING
+ zcx_abapgit_exception .
+
+ " Implementation of deserialize_xml is not complete (but kept as future option)
+ METHODS deserialize_xml
+ IMPORTING
+ !iv_lxe_text_name TYPE string DEFAULT 'LXE_TEXTS'
+ !iv_object_type TYPE tadir-object OPTIONAL
+ !iv_object_name TYPE tadir-obj_name OPTIONAL
+ RAISING
+ zcx_abapgit_exception ##NEEDED.
+
+ METHODS deserialize_from_po
+ IMPORTING
+ !iv_object_type TYPE tadir-object
+ !iv_object_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_changed) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_lang_iso4
+ IMPORTING
+ iv_src TYPE laiso
+ RETURNING
+ VALUE(rv_iso4) TYPE lxeisolang
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_lxe_object_list
+ IMPORTING
+ iv_object_type TYPE trobjtype
+ iv_object_name TYPE sobj_name
+ RETURNING
+ VALUE(rt_obj_list) TYPE lxe_tt_colob .
+ METHODS remove_irrelevant
+ IMPORTING
+ iv_objtype TYPE trobjtype
+ CHANGING
+ ct_text_pairs_tmp TYPE ty_lxe_translation-text_pairs.
+ METHODS read_lxe_object_text_pair
+ IMPORTING
+ iv_s_lang TYPE lxeisolang
+ iv_t_lang TYPE lxeisolang
+ iv_custmnr TYPE lxecustmnr
+ iv_objtype TYPE trobjtype
+ iv_objname TYPE lxeobjname
+ iv_read_only TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rt_text_pairs_tmp) TYPE ty_lxe_translation-text_pairs
+ RAISING
+ zcx_abapgit_exception.
+ METHODS write_lxe_object_text_pair
+ IMPORTING
+ iv_s_lang TYPE lxeisolang
+ iv_t_lang TYPE lxeisolang
+ iv_custmnr TYPE lxecustmnr
+ iv_objtype TYPE trobjtype
+ iv_objname TYPE lxeobjname
+ it_pcx_s1 TYPE ty_lxe_translation-text_pairs
+ RAISING
+ zcx_abapgit_exception.
+ METHODS read_text_items
+ IMPORTING
+ iv_object_type TYPE tadir-object
+ iv_object_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rt_text_items) TYPE ty_lxe_translations
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS langu_to_laiso_safe
+ IMPORTING
+ iv_langu TYPE sy-langu
+ RETURNING
+ VALUE(rv_laiso) TYPE laiso
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS iso4_to_iso2
+ IMPORTING
+ iv_lxe_lang TYPE lxeisolang
+ RETURNING
+ VALUE(rv_laiso) TYPE laiso
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS check_langs_versus_installed
+ IMPORTING
+ it_languages TYPE zif_abapgit_definitions=>ty_languages
+ it_installed TYPE zif_abapgit_definitions=>ty_languages
+ EXPORTING
+ et_intersection TYPE zif_abapgit_definitions=>ty_languages
+ et_missfits TYPE zif_abapgit_definitions=>ty_languages.
+ENDCLASS.
+CLASS zcl_abapgit_po_file DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_i18n_file.
+
+ METHODS constructor
+ IMPORTING
+ iv_lang TYPE laiso
+ iv_suppress_comments TYPE abap_bool DEFAULT abap_false.
+
+ METHODS parse
+ IMPORTING
+ iv_xdata TYPE xstring
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS push_text_pairs
+ IMPORTING
+ iv_objtype TYPE trobjtype
+ iv_objname TYPE lxeobjname
+ it_text_pairs TYPE zif_abapgit_lxe_texts=>ty_text_pairs
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_comment,
+ translator TYPE i VALUE 1,
+ extracted TYPE i VALUE 2,
+ reference TYPE i VALUE 3,
+ flag TYPE i VALUE 4,
+ previous TYPE i VALUE 5,
+ END OF c_comment.
+ TYPES:
+ BEGIN OF ty_comment,
+ kind TYPE i,
+ text TYPE string,
+ END OF ty_comment.
+ TYPES:
+ BEGIN OF ty_msg_pair,
+ source TYPE string,
+ target TYPE string,
+ comments TYPE STANDARD TABLE OF ty_comment WITH KEY kind text,
+ END OF ty_msg_pair.
+
+ DATA mv_lang TYPE laiso.
+ DATA mv_suppress_comments TYPE abap_bool.
+ DATA mt_pairs TYPE SORTED TABLE OF ty_msg_pair WITH UNIQUE KEY source.
+
+ METHODS build_po_body
+ RETURNING
+ VALUE(ro_buf) TYPE REF TO zcl_abapgit_string_buffer.
+ METHODS build_po_head
+ RETURNING
+ VALUE(ro_buf) TYPE REF TO zcl_abapgit_string_buffer.
+ METHODS parse_po
+ IMPORTING
+ iv_data TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS get_comment_marker
+ IMPORTING
+ iv_comment_kind TYPE i
+ RETURNING
+ VALUE(rv_marker) TYPE string.
+
+ CLASS-METHODS quote
+ IMPORTING
+ iv_text TYPE string
+ RETURNING
+ VALUE(rv_text) TYPE string.
+ CLASS-METHODS unquote
+ IMPORTING
+ iv_text TYPE string
+ RETURNING
+ VALUE(rv_text) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_properties_file DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_i18n_file.
+
+ METHODS constructor
+ IMPORTING
+ iv_lang TYPE laiso.
+
+ METHODS parse
+ IMPORTING
+ iv_xdata TYPE xstring
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS push_text_pairs
+ IMPORTING it_translation TYPE string_table.
+
+ METHODS get_translations
+ EXPORTING
+ ev_data TYPE data
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_lang TYPE laiso.
+ DATA mt_translation TYPE string_table.
+
+ENDCLASS.
+CLASS zcl_abapgit_sotr_handler DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_sotr,
+ header TYPE sotr_head,
+ entries TYPE sotr_text_tt,
+ END OF ty_sotr.
+ TYPES:
+ ty_sotr_tt TYPE STANDARD TABLE OF ty_sotr WITH DEFAULT KEY.
+ TYPES:
+ ty_sotr_use_tt TYPE STANDARD TABLE OF sotr_use WITH DEFAULT KEY.
+
+ CLASS-METHODS read_sotr
+ IMPORTING
+ !iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object TYPE trobjtype
+ !iv_obj_name TYPE csequence
+ !io_xml TYPE REF TO zif_abapgit_xml_output OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params
+ EXPORTING
+ !et_sotr TYPE ty_sotr_tt
+ !et_sotr_use TYPE ty_sotr_use_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS create_sotr
+ IMPORTING
+ !iv_package TYPE devclass
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS create_sotr_from_data
+ IMPORTING
+ !iv_package TYPE devclass
+ !it_sotr TYPE ty_sotr_tt
+ !it_sotr_use TYPE ty_sotr_use_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS delete_sotr
+ IMPORTING
+ !iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object TYPE trobjtype
+ !iv_obj_name TYPE csequence
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS delete_sotr_package
+ IMPORTING
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS change_sotr_package
+ IMPORTING
+ !iv_old_package TYPE devclass
+ !iv_new_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ CLASS-METHODS get_sotr_usage
+ IMPORTING
+ !iv_pgmid TYPE tadir-pgmid
+ !iv_object TYPE trobjtype
+ !iv_obj_name TYPE csequence
+ RETURNING
+ VALUE(rt_sotr_use) TYPE ty_sotr_use_tt.
+
+ CLASS-METHODS get_sotr_4_concept
+ IMPORTING
+ !iv_concept TYPE sotr_conc
+ RETURNING
+ VALUE(rs_sotr) TYPE ty_sotr.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_sots_handler DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_sots,
+ header TYPE sotr_headu,
+ entries TYPE sotr_textl_tt,
+ END OF ty_sots.
+ TYPES:
+ ty_sots_tt TYPE STANDARD TABLE OF ty_sots WITH DEFAULT KEY.
+ TYPES:
+ ty_sots_use_tt TYPE STANDARD TABLE OF sotr_useu WITH DEFAULT KEY.
+
+ CLASS-METHODS read_sots
+ IMPORTING
+ !iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object TYPE trobjtype
+ !iv_obj_name TYPE csequence
+ !io_xml TYPE REF TO zif_abapgit_xml_output OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params
+ EXPORTING
+ !et_sots TYPE ty_sots_tt
+ !et_sots_use TYPE ty_sots_use_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS create_sots
+ IMPORTING
+ !iv_package TYPE devclass
+ !io_xml TYPE REF TO zif_abapgit_xml_input OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS create_sots_from_data
+ IMPORTING
+ !iv_package TYPE devclass
+ !it_sots TYPE ty_sots_tt OPTIONAL
+ !it_sots_use TYPE ty_sots_use_tt OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS delete_sots
+ IMPORTING
+ !iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
+ !iv_object TYPE trobjtype
+ !iv_obj_name TYPE csequence
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ CLASS-METHODS get_sots_usage
+ IMPORTING
+ !iv_pgmid TYPE tadir-pgmid
+ !iv_object TYPE trobjtype
+ !iv_obj_name TYPE csequence
+ RETURNING
+ VALUE(rt_sots_use) TYPE ty_sots_use_tt.
+
+ CLASS-METHODS get_sots_4_concept
+ IMPORTING
+ !iv_concept TYPE sotr_conc
+ RETURNING
+ VALUE(rs_sots) TYPE ty_sots.
+
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_objects DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS serialize
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params
+ RETURNING
+ VALUE(rs_files_and_item) TYPE zif_abapgit_objects=>ty_serialization
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS deserialize
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ !ii_log TYPE REF TO zif_abapgit_log
+ RETURNING
+ VALUE(rt_accessed_files) TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS deserialize_checks
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS delete
+ IMPORTING
+ !it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ !is_checks TYPE zif_abapgit_definitions=>ty_delete_checks OPTIONAL
+ !ii_log TYPE REF TO zif_abapgit_log OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS jump
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !is_sub_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ !iv_filename TYPE string OPTIONAL
+ !iv_line_number TYPE i OPTIONAL
+ !iv_new_window TYPE abap_bool DEFAULT abap_true
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS changed_by
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_filename TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_user) TYPE syuname .
+ CLASS-METHODS is_supported
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_native_only TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rv_bool) TYPE abap_bool .
+ CLASS-METHODS is_type_supported
+ IMPORTING
+ !iv_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type
+ RETURNING
+ VALUE(rv_bool) TYPE abap_bool .
+ CLASS-METHODS exists
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RETURNING
+ VALUE(rv_bool) TYPE abap_bool .
+ CLASS-METHODS supported_list
+ RETURNING
+ VALUE(rt_types) TYPE zif_abapgit_objects=>ty_types_tt.
+ CLASS-METHODS is_active
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RETURNING
+ VALUE(rv_active) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_supported_types,
+ obj_type TYPE tadir-object,
+ supported TYPE abap_bool,
+ END OF ty_supported_types.
+
+ TYPES: ty_supported_types_tt TYPE SORTED TABLE OF ty_supported_types WITH UNIQUE KEY obj_type.
+
+ TYPES:
+ BEGIN OF ty_obj_serializer_item,
+ item TYPE zif_abapgit_definitions=>ty_item,
+ metadata TYPE zif_abapgit_definitions=>ty_metadata,
+ END OF ty_obj_serializer_item .
+ TYPES:
+ ty_obj_serializer_map TYPE SORTED TABLE OF ty_obj_serializer_item WITH UNIQUE KEY item .
+
+ CLASS-DATA gt_obj_serializer_map TYPE ty_obj_serializer_map .
+ CLASS-DATA gt_supported_obj_types TYPE ty_supported_types_tt .
+ CLASS-DATA gv_supported_obj_types_loaded TYPE abap_bool .
+
+ CLASS-METHODS check_duplicates
+ IMPORTING
+ !it_files TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS class_name
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ RETURNING
+ VALUE(rv_class_name) TYPE string .
+ CLASS-METHODS update_package_tree
+ IMPORTING
+ !iv_package TYPE devclass .
+ CLASS-METHODS delete_object
+ IMPORTING
+ !iv_package TYPE devclass
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS deserialize_steps
+ IMPORTING
+ !it_steps TYPE zif_abapgit_objects=>ty_step_data_tt
+ !ii_log TYPE REF TO zif_abapgit_log
+ !iv_transport TYPE trkorr
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params
+ CHANGING
+ !ct_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS deserialize_step
+ IMPORTING
+ !is_step TYPE zif_abapgit_objects=>ty_step_data
+ !ii_log TYPE REF TO zif_abapgit_log
+ !iv_transport TYPE trkorr
+ CHANGING
+ !ct_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS deserialize_lxe
+ IMPORTING
+ !is_step TYPE zif_abapgit_objects=>ty_step_data
+ !ii_log TYPE REF TO zif_abapgit_log
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params
+ CHANGING
+ !ct_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS check_original_system
+ IMPORTING
+ !it_items TYPE zif_abapgit_definitions=>ty_items_tt
+ !ii_log TYPE REF TO zif_abapgit_log
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS update_original_system
+ IMPORTING
+ !it_items TYPE zif_abapgit_definitions=>ty_items_tt
+ !ii_log TYPE REF TO zif_abapgit_log
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ !iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS check_objects_locked
+ IMPORTING
+ !it_items TYPE zif_abapgit_definitions=>ty_items_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS create_object
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ !is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
+ !iv_native_only TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_obj) TYPE REF TO zif_abapgit_object
+ RAISING
+ zcx_abapgit_type_not_supported .
+
+ CLASS-METHODS map_tadir_to_items
+ IMPORTING
+ !it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RETURNING
+ VALUE(rt_items) TYPE zif_abapgit_definitions=>ty_items_tt .
+ CLASS-METHODS map_results_to_items
+ IMPORTING
+ !it_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RETURNING
+ VALUE(rt_items) TYPE zif_abapgit_definitions=>ty_items_tt .
+ CLASS-METHODS get_deserialize_steps
+ RETURNING
+ VALUE(rt_steps) TYPE zif_abapgit_objects=>ty_step_data_tt .
+ CLASS-METHODS change_package_assignments
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !ii_log TYPE REF TO zif_abapgit_log .
+ CLASS-METHODS get_extra_from_filename
+ IMPORTING
+ !iv_filename TYPE string
+ RETURNING
+ VALUE(rv_extra) TYPE string.
+
+ CLASS-METHODS is_type_supported_exit
+ IMPORTING
+ !iv_obj_type TYPE zif_abapgit_definitions=>ty_item-obj_type
+ RETURNING
+ VALUE(rv_bool) TYPE abap_bool.
+ENDCLASS.
+CLASS zcl_abapgit_objects_factory DEFINITION
+ CREATE PRIVATE
+ .
+
+ PUBLIC SECTION.
+ CLASS-METHODS get_gui_jumper
+ RETURNING
+ VALUE(ri_gui_jumper) TYPE REF TO zif_abapgit_gui_jumper .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gi_gui_jumper TYPE REF TO zif_abapgit_gui_jumper .
+ENDCLASS.
+CLASS zcl_abapgit_objects_generic DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras DEFAULT sy-langu
+ io_field_rules TYPE REF TO zif_abapgit_field_rules OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete
+ IMPORTING
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize
+ IMPORTING
+ !iv_package TYPE devclass
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS exists
+ RETURNING
+ VALUE(rv_bool) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+
+ TYPES:
+ BEGIN OF ty_s_objkey,
+ num TYPE n LENGTH 3,
+ value TYPE c LENGTH 128,
+ END OF ty_s_objkey .
+ TYPES:
+ ty_t_objkey TYPE SORTED TABLE OF ty_s_objkey WITH UNIQUE KEY num .
+
+ DATA ms_object_header TYPE objh .
+ DATA:
+ mt_object_table TYPE STANDARD TABLE OF objsl WITH DEFAULT KEY .
+ DATA:
+ mt_object_method TYPE STANDARD TABLE OF objm WITH DEFAULT KEY .
+ DATA ms_item TYPE zif_abapgit_definitions=>ty_item .
+ DATA mv_language TYPE spras .
+
+ METHODS after_import .
+ METHODS before_export .
+ METHODS corr_insert
+ IMPORTING
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_data
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ METHODS distribute_name_to_components
+ IMPORTING
+ !it_key_component TYPE ddfields
+ CHANGING
+ !ct_objkey TYPE ty_t_objkey
+ !cs_objkey TYPE ty_s_objkey
+ !cv_non_value_pos TYPE numc3 .
+ METHODS get_key_fields
+ IMPORTING
+ !iv_table TYPE objsl-tobj_name
+ RETURNING
+ VALUE(rt_keys) TYPE ddfields
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_primary_table
+ RETURNING
+ VALUE(rv_table) TYPE objsl-tobj_name
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_where_clause
+ IMPORTING
+ !iv_tobj_name TYPE objsl-tobj_name
+ RETURNING
+ VALUE(rv_where) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_data
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS split_value_to_keys
+ IMPORTING
+ !it_key_component TYPE ddfields
+ CHANGING
+ !ct_objkey TYPE ty_t_objkey
+ !cs_objkey TYPE ty_s_objkey
+ !cv_non_value_pos TYPE numc3 .
+ METHODS validate
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+
+ DATA mo_field_rules TYPE REF TO zif_abapgit_field_rules .
+
+ METHODS apply_clear_logic
+ IMPORTING
+ !iv_table TYPE objsl-tobj_name
+ CHANGING
+ !ct_data TYPE STANDARD TABLE .
+ METHODS apply_fill_logic
+ IMPORTING
+ !iv_table TYPE objsl-tobj_name
+ !iv_package TYPE devclass
+ CHANGING
+ !ct_data TYPE STANDARD TABLE .
+ENDCLASS.
+CLASS zcl_abapgit_objects_super DEFINITION
+ ABSTRACT
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CONSTANTS c_user_unknown TYPE syuname VALUE 'UNKNOWN'.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL.
+
+ METHODS get_accessed_files
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt.
+ PROTECTED SECTION.
+
+ DATA:
+ ms_item TYPE zif_abapgit_definitions=>ty_item,
+ mv_language TYPE spras,
+ mo_files TYPE REF TO zcl_abapgit_objects_files,
+ mo_i18n_params TYPE REF TO zcl_abapgit_i18n_params.
+
+ METHODS get_metadata
+ RETURNING
+ VALUE(rs_metadata) TYPE zif_abapgit_definitions=>ty_metadata .
+ METHODS corr_insert
+ IMPORTING
+ !iv_package TYPE devclass
+ !ig_object_class TYPE any OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS tadir_insert
+ IMPORTING
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ METHODS tadir_delete
+ RAISING
+ zcx_abapgit_exception .
+ METHODS exists_a_lock_entry_for
+ IMPORTING
+ !iv_lock_object TYPE string
+ !iv_argument TYPE csequence OPTIONAL
+ !iv_prefix TYPE csequence OPTIONAL
+ RETURNING
+ VALUE(rv_exists_a_lock_entry) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_default_package
+ IMPORTING
+ !iv_package TYPE devclass .
+ METHODS set_default_transport
+ IMPORTING
+ !iv_transport TYPE trkorr.
+ METHODS serialize_longtexts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !iv_longtext_id TYPE dokil-id OPTIONAL
+ !it_dokil TYPE zif_abapgit_definitions=>ty_dokil_tt OPTIONAL
+ !iv_longtext_name TYPE string DEFAULT 'LONGTEXTS'
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_longtexts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ !iv_longtext_id TYPE dokil-id OPTIONAL
+ !iv_longtext_name TYPE string DEFAULT 'LONGTEXTS'
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete_longtexts
+ IMPORTING
+ !iv_longtext_id TYPE dokil-id
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_active
+ RETURNING
+ VALUE(rv_active) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete_ddic
+ IMPORTING
+ !iv_objtype TYPE string
+ !iv_no_ask TYPE abap_bool DEFAULT abap_true
+ !iv_no_ask_delete_append TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_abap_language_version
+ RETURNING
+ VALUE(rv_abap_language_version) TYPE uccheck
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_abap_language_version
+ CHANGING
+ !cv_abap_language_version TYPE uccheck
+ RAISING
+ zcx_abapgit_exception .
+ METHODS clear_abap_language_version
+ CHANGING
+ !cv_abap_language_version TYPE uccheck
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ENDCLASS.
+"! Provides common functionality for the abapGit integration of objects based on ABAP File Formats (AFF).
+"! It inherits from {@link ZCL_ABAPGIT_OBJECTS_SUPER} and implements the interface {@link ZIF_ABAPGIT_OBJECT}.
+"!
+"! Each subclass must implement at least the abstract method ZIF_ABAPGIT_OBJECT~CHANGED_BY.
+"! In case you deal with a DDIC object, the methods GET_METADATA and ZIF_ABAPGIT_OBJECT~GET_DESERIALIZE_STEPS
+"! have to be redefined in the subclass.
+"!
+"! In case the object has an additional file to the json file, the subclass needs
+"! to redefine the method GET_ADDITIONAL_EXTENSIONS.
+"!
+"! This common class fully relies on the implementation of the object-specific AFF handler
+"! (it inherits from {@link CL_AFF_OBJECT_HANDLER}).
+"! Precisely, for the existence check-, serialization-, deserialization- or deletion-functionality, the corresponding
+"! AFF object handler method is called.
+CLASS zcl_abapgit_object_common_aff DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ ABSTRACT
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object
+ ABSTRACT METHODS changed_by .
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ TYPES: BEGIN OF ty_extension_mapper_pair,
+ "! file extension
+ extension TYPE string,
+ "! instance of {@link CL_AFF_FILE_NAME_MAPPER} providing file names for file extensions
+ file_name_mapper TYPE REF TO object,
+ END OF ty_extension_mapper_pair,
+ ty_extension_mapper_pairs TYPE STANDARD TABLE OF ty_extension_mapper_pair WITH DEFAULT KEY.
+
+ "! Delivers other file extensions than json to be considered at serialize or deserialize of an object
+ METHODS get_additional_extensions
+ RETURNING VALUE(rv_additional_extensions) TYPE ty_extension_mapper_pairs ##NEEDED.
+
+ "! Delivers an instance of AFF object handler ({@link IF_AFF_OBJECT_HANDLER})
+ METHODS get_object_handler
+ RETURNING
+ VALUE(ro_object_handler) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception.
+ METHODS create_aff_setting_deserialize FINAL
+ RETURNING
+ VALUE(ro_settings_deserialize) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+ METHODS is_file_empty
+ IMPORTING
+ io_object_json_file TYPE REF TO object
+ RETURNING
+ VALUE(rv_is_empty) TYPE abap_bool.
+
+ CLASS-METHODS remove_abap_language_version
+ IMPORTING
+ iv_json_as_xstring TYPE xstring
+ RETURNING
+ VALUE(rv_json_as_xstring_wo_alv) TYPE xstring
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_aplo DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS zif_abapgit_object~changed_by
+ REDEFINITION .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_bgqc DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+
+ PRIVATE SECTION.
+ CONSTANTS c_bgqc_name TYPE string VALUE 'BGQCNAME'.
+ CONSTANTS c_bgqc_wbi_p TYPE string VALUE 'CL_BGQC_WBI_P'.
+ CONSTANTS c_select_changed_by TYPE string VALUE 'IF_BGQC_WBI_P~SELECT_CHANGED_BY'.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_cdbo DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_table_name TYPE tabname VALUE 'CDB_OBJH' ##NO_TEXT.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_chkc DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_chko DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_chkv DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_cota DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+ METHODS zif_abapgit_object~delete REDEFINITION.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_dras DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+ METHODS zif_abapgit_object~get_deserialize_steps REDEFINITION.
+ PROTECTED SECTION.
+ METHODS get_additional_extensions REDEFINITION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_drty DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+ METHODS zif_abapgit_object~get_deserialize_steps REDEFINITION.
+ PROTECTED SECTION.
+ METHODS get_additional_extensions REDEFINITION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_dsfd DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+ METHODS zif_abapgit_object~get_deserialize_steps REDEFINITION.
+ PROTECTED SECTION.
+ METHODS get_additional_extensions REDEFINITION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_dsfi DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+ METHODS zif_abapgit_object~get_deserialize_steps REDEFINITION.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_dteb DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION .
+ METHODS zif_abapgit_object~get_deserialize_steps REDEFINITION.
+ PROTECTED SECTION.
+
+ METHODS get_additional_extensions
+ REDEFINITION .
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_eeec DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS:
+ zif_abapgit_object~changed_by REDEFINITION .
+
+ PROTECTED SECTION.
+ METHODS: get_object_handler REDEFINITION.
+ENDCLASS.
+CLASS zcl_abapgit_object_evtb DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS:
+ c_table_name TYPE tabname VALUE 'EVTB_HEADER'.
+ENDCLASS.
+CLASS zcl_abapgit_object_gsmp DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_nont DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS c_table_name TYPE tabname VALUE 'NONT_HEADER'.
+ENDCLASS.
+CLASS zcl_abapgit_object_ront DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS c_table_name TYPE tabname VALUE 'RONT_HEADER'.
+ENDCLASS.
+CLASS zcl_abapgit_object_sajc DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS zif_abapgit_object~changed_by
+ REDEFINITION .
+ METHODS zif_abapgit_object~get_deserialize_steps REDEFINITION.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_sajt DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS zif_abapgit_object~changed_by
+ REDEFINITION .
+ METHODS zif_abapgit_object~get_deserialize_steps REDEFINITION.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_smbc DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ METHODS zif_abapgit_object~changed_by REDEFINITION.
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_swcr DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS: zif_abapgit_object~changed_by REDEFINITION.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_uiad DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS zif_abapgit_object~changed_by
+ REDEFINITION .
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_uipg DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS zif_abapgit_object~changed_by
+ REDEFINITION .
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_uist DEFINITION
+ INHERITING FROM zcl_abapgit_object_common_aff
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS zif_abapgit_object~changed_by
+ REDEFINITION .
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_tabl DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ "! get additional data like table authorization group
+ "! @parameter iv_tabname | name of the table
+ METHODS read_extras IMPORTING iv_tabname TYPE ddobjname
+ RETURNING VALUE(rs_tabl_extras) TYPE zif_abapgit_object_tabl=>ty_tabl_extras
+ RAISING zcx_abapgit_exception.
+
+ "! Update additional data
+ "! @parameter iv_tabname | name of the table
+ "! @parameter is_tabl_extras | additional table data
+ METHODS update_extras IMPORTING iv_tabname TYPE ddobjname
+ is_tabl_extras TYPE zif_abapgit_object_tabl=>ty_tabl_extras
+ RAISING zcx_abapgit_exception.
+
+ "! Delete additional data
+ "! @parameter iv_tabname | name of the table
+ METHODS delete_extras IMPORTING iv_tabname TYPE ddobjname.
+
+ "! Serialize IDoc Segment type/definition if exits
+ "! @raising zcx_abapgit_exception | Exceptions
+ METHODS serialize_idoc_segment CHANGING cs_internal TYPE zif_abapgit_object_tabl=>ty_internal
+ RAISING zcx_abapgit_exception.
+
+ "! Deserialize IDoc Segment type/definition if exits
+ "! @parameter iv_package | Target package
+ "! @parameter rv_deserialized | It's a segment and was deserialized
+ "! @raising zcx_abapgit_exception | Exceptions
+ METHODS deserialize_idoc_segment IMPORTING is_internal TYPE zif_abapgit_object_tabl=>ty_internal
+ iv_transport TYPE trkorr
+ iv_package TYPE devclass
+ RETURNING VALUE(rv_deserialized) TYPE abap_bool
+ RAISING zcx_abapgit_exception.
+ "! Delete the IDoc Segment type if exists
+ "! @parameter rv_deleted | It's a segment and was deleted
+ "! @raising zcx_abapgit_exception | Exceptions
+ METHODS delete_idoc_segment RETURNING VALUE(rv_deleted) TYPE abap_bool
+ RAISING zcx_abapgit_exception.
+ PRIVATE SECTION.
+ CONSTANTS c_longtext_id_tabl TYPE dokil-id VALUE 'TB' ##NO_TEXT.
+
+ METHODS deserialize_indexes
+ IMPORTING
+ !is_internal TYPE zif_abapgit_object_tabl=>ty_internal
+ RAISING
+ zcx_abapgit_exception .
+ METHODS clear_dd03p_fields
+ CHANGING
+ !ct_dd03p TYPE zif_abapgit_object_tabl=>ty_dd03p_tt .
+ "! Check if structure is an IDoc segment
+ "! @parameter rv_is_idoc_segment | It's an IDoc segment or not
+ METHODS is_idoc_segment
+ RETURNING
+ VALUE(rv_is_idoc_segment) TYPE abap_bool .
+ METHODS clear_dd03p_fields_common
+ CHANGING
+ !cs_dd03p TYPE dd03p .
+ METHODS clear_dd03p_fields_dataelement
+ CHANGING
+ !cs_dd03p TYPE dd03p .
+ METHODS serialize_texts
+ CHANGING
+ !cs_internal TYPE zif_abapgit_object_tabl=>ty_internal
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_texts
+ CHANGING
+ !cs_internal TYPE zif_abapgit_object_tabl=>ty_internal
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_db_table_category
+ IMPORTING
+ !iv_tabclass TYPE dd02l-tabclass
+ RETURNING
+ VALUE(rv_is_db_table_type) TYPE dd02l-tabclass .
+ENDCLASS.
+CLASS zcl_abapgit_object_acid DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS: create_object
+ RETURNING VALUE(ro_aab) TYPE REF TO cl_aab_id
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_aifc DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ TYPES:
+ BEGIN OF ty_aif_key_s,
+ ns TYPE c LENGTH 6,
+ ifname TYPE c LENGTH 10,
+ ifver TYPE c LENGTH 5,
+ END OF ty_aif_key_s.
+ TYPES:
+ BEGIN OF ty_icd_data_key_s,
+ depl_scenario TYPE c LENGTH 20,
+ ns TYPE c LENGTH 6,
+ ifname TYPE c LENGTH 10,
+ ifver2 TYPE c LENGTH 4,
+ END OF ty_icd_data_key_s.
+ TYPES:
+ BEGIN OF ty_icd_data_key,
+ depl_scenario TYPE c LENGTH 20,
+ ns TYPE c LENGTH 6,
+ ifname TYPE c LENGTH 10,
+ ifver2 TYPE c LENGTH 4,
+ ifver TYPE c LENGTH 5,
+ END OF ty_icd_data_key.
+ TYPES:
+ BEGIN OF ty_table_data_s,
+ tabname TYPE tabname,
+ table_data TYPE REF TO data,
+ END OF ty_table_data_s.
+ TYPES:
+ ty_table_data_t TYPE SORTED TABLE OF
+ ty_table_data_s WITH UNIQUE KEY tabname.
+
+ DATA ms_icd_data_key TYPE ty_icd_data_key_s.
+
+ METHODS handle_table_data
+ IMPORTING
+ !iv_tabname TYPE tabname
+ !it_data TYPE STANDARD TABLE
+ RAISING
+ zcx_abapgit_exception.
+ METHODS clear_client
+ CHANGING
+ !ct_data TYPE STANDARD TABLE
+ RAISING
+ zcx_abapgit_exception.
+ METHODS authorization_check
+ RETURNING
+ VALUE(rv_success) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_content_compress
+ IMPORTING
+ !io_log TYPE REF TO zif_abapgit_log
+ !is_ifkeys TYPE ty_aif_key_s
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception.
+ METHODS validate_interface
+ IMPORTING
+ !is_ifkeys TYPE ty_aif_key_s
+ RETURNING
+ VALUE(rv_success) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ METHODS compress_interface
+ IMPORTING
+ !is_ifkeys TYPE ty_aif_key_s
+ RETURNING
+ VALUE(rv_success) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ METHODS execute_checks
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RETURNING
+ VALUE(rv_success) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_content_s,
+ tabname TYPE tabname,
+ END OF ty_content_s.
+ TYPES:
+ ty_content_t TYPE STANDARD TABLE OF ty_content_s WITH NON-UNIQUE DEFAULT KEY.
+
+ DATA mo_abapgit_util TYPE REF TO object.
+ENDCLASS.
+CLASS zcl_abapgit_object_amsd DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS:
+ clear_fields
+ CHANGING
+ cs_logical_db_schema TYPE any,
+
+ clear_field
+ IMPORTING
+ iv_fieldname TYPE csequence
+ CHANGING
+ cs_logical_db_schema TYPE any,
+
+ fill_metadata_from_db
+ CHANGING
+ cs_logical_db_schema TYPE any
+ RAISING
+ zcx_abapgit_exception,
+
+ get_wb_object_operator
+ RETURNING
+ VALUE(ri_wb_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception.
+
+ DATA:
+ mr_logical_db_schema TYPE REF TO data,
+ mv_logical_db_schema_key TYPE seu_objkey,
+ mi_persistence TYPE REF TO if_wb_object_persist,
+ mi_wb_object_operator TYPE REF TO object.
+ENDCLASS.
+CLASS zcl_abapgit_object_apis DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS c_model TYPE string VALUE 'ARS_S_API_ABAPGIT'.
+ DATA mo_handler TYPE REF TO object.
+ METHODS initialize.
+ENDCLASS.
+CLASS zcl_abapgit_object_aqbg DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_aqqu DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_aqsg DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_area DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_asfc DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_auth DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mv_fieldname TYPE authx-fieldname.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_avar DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS: create_object
+ RETURNING VALUE(ro_aab_var) TYPE REF TO cl_aab_variant
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_avas DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ TYPES:
+ BEGIN OF ty_header,
+ guid TYPE guid_32,
+ attribute TYPE cls_attribute_name,
+ object TYPE pak_object_key,
+ END OF ty_header .
+ TYPES:
+ BEGIN OF ty_avas,
+ header TYPE ty_header,
+ values TYPE cls_value_assignments,
+ links TYPE cls_linked_objects,
+ END OF ty_avas .
+
+ METHODS insert_assignments
+ IMPORTING
+ !is_avas TYPE ty_avas
+ RAISING
+ zcx_abapgit_exception .
+ METHODS instantiate
+ RETURNING
+ VALUE(ro_avas) TYPE REF TO cl_cls_attr_value_assignment
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_bdef DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mi_persistence TYPE REF TO if_wb_object_persist .
+ DATA mi_wb_object_operator TYPE REF TO object .
+ DATA mv_behaviour_definition_key TYPE seu_objkey .
+ DATA mr_behaviour_definition TYPE REF TO data .
+
+ METHODS clear_fields
+ CHANGING
+ !cs_metadata TYPE any .
+ METHODS clear_field
+ IMPORTING
+ !iv_fieldname TYPE csequence
+ CHANGING
+ !cs_metadata TYPE any .
+ METHODS get_wb_object_operator
+ RETURNING
+ VALUE(ri_wb_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception .
+ METHODS merge_object_data
+ IMPORTING
+ !io_object_data TYPE REF TO object
+ RETURNING
+ VALUE(ro_object_data_merged) TYPE REF TO if_wb_object_data_model
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_object_data
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RETURNING
+ VALUE(ro_object_data) TYPE REF TO if_wb_object_data_model
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_char DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_char,
+ cls_attribute TYPE cls_attribute,
+ cls_attributet TYPE STANDARD TABLE OF cls_attributet WITH DEFAULT KEY,
+ cls_attr_value TYPE STANDARD TABLE OF cls_attr_value WITH DEFAULT KEY,
+ cls_attr_valuet TYPE STANDARD TABLE OF cls_attr_valuet WITH DEFAULT KEY,
+ END OF ty_char .
+
+ CONSTANTS c_longtext_id_char TYPE dokil-id VALUE 'CH'.
+
+ METHODS instantiate_char_and_lock
+ IMPORTING
+ !iv_type_group TYPE cls_object_type_group
+ !iv_activation_state TYPE pak_activation_state
+ RETURNING
+ VALUE(ro_char) TYPE REF TO cl_cls_attribute
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_chdo DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ METHODS after_import
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete_tadir_cdnames
+ IMPORTING
+ !is_cdnames TYPE cdnames
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete_tadir_tabl
+ IMPORTING
+ !is_tcdrs TYPE tcdrs
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_change_document,
+ reports_generated TYPE SORTED TABLE OF tcdrps WITH UNIQUE KEY object reportname,
+ objects TYPE SORTED TABLE OF tcdobs WITH UNIQUE KEY object tabname,
+ objects_text TYPE SORTED TABLE OF tcdobts WITH UNIQUE KEY spras object,
+ END OF ty_change_document.
+
+ DATA: mv_object TYPE cdobjectcl.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_cmod DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_cmpt DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mo_cmp_db TYPE REF TO object,
+ mv_name TYPE c LENGTH 30.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_cus0 DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: ty_img_activity_texts TYPE STANDARD TABLE OF cus_imgact
+ WITH NON-UNIQUE DEFAULT KEY,
+ BEGIN OF ty_img_activity,
+ header TYPE cus_imgach,
+ texts TYPE ty_img_activity_texts,
+ END OF ty_img_activity.
+ DATA: mv_img_activity TYPE cus_img_ac.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_cus1 DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: ty_activity_titles TYPE STANDARD TABLE OF cus_actt
+ WITH NON-UNIQUE DEFAULT KEY,
+
+ ty_objects TYPE STANDARD TABLE OF cus_actobj
+ WITH NON-UNIQUE DEFAULT KEY,
+
+ ty_objects_title TYPE STANDARD TABLE OF cus_actobt
+ WITH NON-UNIQUE DEFAULT KEY,
+
+ BEGIN OF ty_customzing_activity,
+ activity_header TYPE cus_acth,
+ activity_customer_exit TYPE cus_actext,
+ activity_title TYPE ty_activity_titles,
+ objects TYPE ty_objects,
+ objects_title TYPE ty_objects_title,
+ END OF ty_customzing_activity.
+
+ DATA: mv_customizing_activity TYPE cus_img_ac.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_cus2 DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: ty_attribute_titles TYPE STANDARD TABLE OF cus_atrt
+ WITH NON-UNIQUE DEFAULT KEY,
+ ty_attribute_countries TYPE STANDARD TABLE OF cus_atrcou
+ WITH NON-UNIQUE DEFAULT KEY,
+ ty_attribute_components TYPE STANDARD TABLE OF tfm18
+ WITH NON-UNIQUE DEFAULT KEY,
+ ty_attribute_comp_variants TYPE STANDARD TABLE OF cus_atrvco
+ WITH NON-UNIQUE DEFAULT KEY.
+
+ TYPES: BEGIN OF ty_customizing_attribute,
+ header TYPE cus_atrh,
+ titles TYPE ty_attribute_titles,
+ countries TYPE ty_attribute_countries,
+ components TYPE ty_attribute_components,
+ components_variants TYPE ty_attribute_comp_variants,
+ END OF ty_customizing_attribute.
+
+ DATA: mv_img_attribute TYPE cus_atr.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_dcls DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mo_dcl_handler TYPE REF TO object. " CL_ACM_DCL_HANDLER
+ METHODS clear_fields
+ CHANGING
+ !cg_data TYPE any
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_ddls DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ METHODS open_adt_stob
+ IMPORTING
+ iv_ddls_name TYPE tadir-obj_name
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+ DATA mo_ddl_handler TYPE REF TO object. " CL_DD_DDL_HANDLER
+ METHODS is_baseinfo_supported
+ RETURNING
+ VALUE(rv_supported) TYPE abap_bool .
+ METHODS read_baseinfo
+ RETURNING
+ VALUE(rv_baseinfo_string) TYPE string.
+ METHODS format_source_before_serialize
+ CHANGING
+ cv_string TYPE string.
+ METHODS clear_fields
+ CHANGING
+ !cg_data TYPE any
+ RAISING
+ zcx_abapgit_exception .
+
+ENDCLASS.
+CLASS zcl_abapgit_object_ddlx DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mi_persistence TYPE REF TO if_wb_object_persist.
+ DATA mi_data_model TYPE REF TO if_wb_object_data_model.
+ DATA mv_object_key TYPE seu_objkey.
+ METHODS clear_fields
+ CHANGING
+ !cg_data TYPE any
+ RAISING
+ zcx_abapgit_exception .
+
+ENDCLASS.
+CLASS zcl_abapgit_object_devc DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_local_devclass TYPE devclass .
+
+ METHODS get_package
+ RETURNING
+ VALUE(ri_package) TYPE REF TO if_package
+ RAISING
+ zcx_abapgit_exception .
+ METHODS update_pinf_usages
+ IMPORTING
+ !ii_package TYPE REF TO if_package
+ !it_usage_data TYPE scomppdata
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_lock
+ IMPORTING
+ !ii_package TYPE REF TO if_package
+ !iv_lock TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS unlock_and_raise_error
+ IMPORTING
+ !ii_package TYPE REF TO if_package
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_empty
+ IMPORTING
+ !iv_package_name TYPE devclass
+ RETURNING
+ VALUE(rv_is_empty) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS load_package
+ IMPORTING
+ !iv_package_name TYPE devclass
+ RETURNING
+ VALUE(ri_package) TYPE REF TO if_package
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_local
+ IMPORTING
+ !iv_package_name TYPE devclass
+ RETURNING
+ VALUE(rv_is_local) TYPE abap_bool .
+ METHODS remove_obsolete_tadir
+ IMPORTING
+ !iv_package_name TYPE devclass
+ RAISING
+ zcx_abapgit_exception.
+ METHODS adjust_sw_component
+ CHANGING
+ cv_dlvunit TYPE dlvunit.
+ENDCLASS.
+CLASS zcl_abapgit_object_dial DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_dialog_module,
+ tdct TYPE tdct,
+ dia_pars TYPE STANDARD TABLE OF diapar
+ WITH NON-UNIQUE DEFAULT KEY,
+ END OF ty_dialog_module.
+
+ METHODS:
+ _read_tdct
+ RETURNING
+ VALUE(rs_tdct) TYPE tdct.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_doct DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_id TYPE dokhl-id VALUE 'TX' ##NO_TEXT.
+ CONSTANTS c_name TYPE string VALUE 'DOC' ##NO_TEXT.
+ DATA mi_longtexts TYPE REF TO zif_abapgit_longtexts .
+ENDCLASS.
+CLASS zcl_abapgit_object_docv DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_data,
+ doctitle TYPE dsyst-doktitle,
+ head TYPE thead,
+ lines TYPE tline_tab,
+ END OF ty_data.
+
+ CONSTANTS c_typ TYPE dokhl-typ VALUE 'E' ##NO_TEXT.
+ CONSTANTS c_version TYPE dokhl-dokversion VALUE '0001' ##NO_TEXT.
+ CONSTANTS c_name TYPE string VALUE 'DOC' ##NO_TEXT.
+
+ DATA mv_id TYPE dokhl-id.
+ DATA mv_doc_object TYPE dokhl-object.
+
+ METHODS read
+ RETURNING
+ VALUE(rs_data) TYPE ty_data.
+ENDCLASS.
+CLASS zcl_abapgit_object_doma DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_dd01_text,
+ ddlanguage TYPE dd01v-ddlanguage,
+ ddtext TYPE dd01v-ddtext,
+ END OF ty_dd01_text .
+ TYPES:
+ BEGIN OF ty_dd07_text,
+ valpos TYPE dd07v-valpos,
+ ddlanguage TYPE dd07v-ddlanguage,
+ domvalue_l TYPE dd07v-domvalue_l,
+ domvalue_h TYPE dd07v-domvalue_h,
+ ddtext TYPE dd07v-ddtext,
+ domval_ld TYPE dd07v-domval_ld,
+ domval_hd TYPE dd07v-domval_hd,
+ END OF ty_dd07_text .
+ TYPES:
+ ty_dd01_texts TYPE STANDARD TABLE OF ty_dd01_text .
+ TYPES:
+ ty_dd07_texts TYPE STANDARD TABLE OF ty_dd07_text .
+
+ " Fields that are not part of dd01v
+ TYPES:
+ BEGIN OF ty_extra,
+ abap_language_version TYPE c LENGTH 1,
+ END OF ty_extra.
+
+ CONSTANTS c_longtext_id_doma TYPE dokil-id VALUE 'DO' ##NO_TEXT.
+
+ METHODS serialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !it_dd07v TYPE dd07v_tab
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ !is_dd01v TYPE dd01v
+ !it_dd07v TYPE dd07v_tab
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS handle_dependencies
+ IMPORTING
+ !iv_step TYPE zif_abapgit_objects=>ty_deserialization_step
+ CHANGING
+ !cv_exit TYPE dd01v-convexit
+ !cv_done TYPE abap_bool.
+
+ METHODS adjust_exit
+ CHANGING
+ !cv_exit TYPE dd01v-convexit.
+
+ METHODS check_exit
+ IMPORTING
+ !iv_exit TYPE dd01v-convexit
+ RETURNING
+ VALUE(rv_done) TYPE abap_bool.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_drul DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS:
+ clear_fields
+ CHANGING
+ cs_dependency_rule TYPE any,
+
+ clear_field
+ IMPORTING
+ iv_fieldname TYPE csequence
+ CHANGING
+ cs_dependency_rule TYPE any,
+
+ fill_metadata_from_db
+ CHANGING
+ cs_dependency_rule TYPE any
+ RAISING
+ zcx_abapgit_exception,
+
+ get_wb_object_operator
+ RETURNING
+ VALUE(ri_wb_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception.
+
+ DATA:
+ mr_dependency_rule TYPE REF TO data,
+ mv_dependency_rule_key TYPE seu_objkey,
+ mi_persistence TYPE REF TO if_wb_object_persist,
+ mi_wb_object_operator TYPE REF TO object.
+ENDCLASS.
+CLASS zcl_abapgit_object_dsys DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ CONSTANTS: c_typ TYPE dokhl-typ VALUE 'E',
+ c_id TYPE dokhl-id VALUE 'HY'.
+
+ DATA: mv_doc_object TYPE sobj_name.
+
+ TYPES: BEGIN OF ty_data,
+ doctitle TYPE dsyst-doktitle,
+ head TYPE thead,
+ lines TYPE tline_tab,
+ END OF ty_data.
+
+ METHODS deserialize_dsys
+ IMPORTING
+ ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_main_lang
+ RETURNING
+ VALUE(rv_language) TYPE spras.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_dtdc DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS:
+ clear_fields
+ CHANGING
+ cs_dynamic_cache TYPE any,
+
+ clear_field
+ IMPORTING
+ iv_fieldname TYPE csequence
+ CHANGING
+ cs_dynamic_cache TYPE any,
+
+ fill_metadata_from_db
+ CHANGING
+ cs_dynamic_cache TYPE any
+ RAISING
+ zcx_abapgit_exception,
+
+ get_wb_object_operator
+ RETURNING
+ VALUE(ri_wb_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception,
+
+ has_own_wb_data_class
+ RETURNING
+ VALUE(rv_supported) TYPE abap_bool.
+
+ DATA:
+ mr_dynamic_cache TYPE REF TO data,
+ mv_dynamic_cache_key TYPE seu_objkey,
+ mv_has_own_wb_data_class TYPE abap_bool,
+ mi_persistence TYPE REF TO if_wb_object_persist,
+ mi_wb_object_operator TYPE REF TO object.
+ENDCLASS.
+CLASS zcl_abapgit_object_dtel DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_dd04_text,
+ ddlanguage TYPE dd04t-ddlanguage,
+ ddtext TYPE dd04t-ddtext,
+ reptext TYPE dd04t-reptext,
+ scrtext_s TYPE dd04t-scrtext_s,
+ scrtext_m TYPE dd04t-scrtext_m,
+ scrtext_l TYPE dd04t-scrtext_l,
+ END OF ty_dd04_text .
+ TYPES:
+ ty_dd04_texts TYPE STANDARD TABLE OF ty_dd04_text .
+
+ " Fields that are not part of dd04v
+ TYPES:
+ BEGIN OF ty_extra,
+ abap_language_version TYPE uccheck,
+ END OF ty_extra.
+
+ CONSTANTS c_longtext_id_dtel TYPE dokil-id VALUE 'DE' ##NO_TEXT.
+ CONSTANTS c_longtext_id_dtel_suppl TYPE dokil-id VALUE 'DZ' ##NO_TEXT.
+
+ METHODS serialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ !is_dd04v TYPE dd04v
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_ecatt_super DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ ABSTRACT
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ METHODS:
+ get_object_type ABSTRACT
+ RETURNING VALUE(rv_object_type) TYPE etobj_type,
+
+ get_upload ABSTRACT
+ RETURNING
+ VALUE(ro_upload) TYPE REF TO cl_apl_ecatt_upload,
+
+ get_download ABSTRACT
+ RETURNING
+ VALUE(ro_download) TYPE REF TO cl_apl_ecatt_download,
+
+ get_lock_object ABSTRACT
+ RETURNING
+ VALUE(rv_lock_object) TYPE eqeobj.
+
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_last_changed,
+ luser TYPE syuname,
+ ldate TYPE d,
+ ltime TYPE t,
+ END OF ty_last_changed.
+
+ CONSTANTS:
+ BEGIN OF c_name,
+ version TYPE string VALUE 'VERSION' ##NO_TEXT,
+ versions TYPE string VALUE 'VERSIONS' ##NO_TEXT,
+ END OF c_name,
+ c_default_version TYPE etobj_ver VALUE '1' ##NO_TEXT.
+
+ CLASS-METHODS:
+ is_change_more_recent_than
+ IMPORTING
+ is_currently_changed TYPE ty_last_changed
+ is_last_changed TYPE ty_last_changed
+ RETURNING
+ VALUE(rv_is_change_more_recent) TYPE abap_bool.
+
+ DATA:
+ mv_object_name TYPE etobj_name.
+
+ METHODS:
+ get_changed_date
+ IMPORTING
+ ii_document TYPE REF TO if_ixml_document
+ RETURNING
+ VALUE(rv_changed_date) TYPE d,
+
+ get_changed_time
+ IMPORTING
+ ii_document TYPE REF TO if_ixml_document
+ RETURNING
+ VALUE(rv_changed_time) TYPE t,
+
+ get_changed_by_user
+ IMPORTING
+ ii_document TYPE REF TO if_ixml_document
+ RETURNING
+ VALUE(rv_changed_by_user) TYPE syuname,
+
+ get_change_information
+ IMPORTING
+ is_version_info TYPE etversinfo
+ RETURNING
+ VALUE(rs_change_information) TYPE ty_last_changed
+ RAISING
+ cx_ecatt_apl
+ zcx_abapgit_exception,
+
+ clear_attributes
+ CHANGING
+ ci_document TYPE REF TO if_ixml_document,
+
+ clear_elements
+ CHANGING
+ ci_document TYPE REF TO if_ixml_document,
+
+ get_version_from_node
+ IMPORTING
+ ii_node TYPE REF TO if_ixml_node
+ RETURNING
+ VALUE(rv_version) TYPE string,
+
+ deserialize_version
+ IMPORTING
+ ii_version_node TYPE REF TO if_ixml_node
+ iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception,
+
+ serialize_version
+ IMPORTING
+ iv_version TYPE etversinfo-version
+ CHANGING
+ ci_node TYPE REF TO if_ixml_element
+ RAISING
+ cx_ecatt
+ zcx_abapgit_exception,
+
+ clear_element
+ IMPORTING
+ iv_name TYPE csequence
+ CHANGING
+ ci_document TYPE REF TO if_ixml_document,
+
+ clear_element_collection
+ IMPORTING
+ iv_name TYPE csequence
+ CHANGING
+ ci_document TYPE REF TO if_ixml_document,
+
+ serialize_versions
+ IMPORTING
+ it_version_info TYPE etversinfo_tabtype
+ CHANGING
+ ci_document TYPE REF TO if_ixml_document
+ RAISING
+ cx_ecatt
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_object_ecat DEFINITION
+ INHERITING FROM zcl_abapgit_object_ecatt_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ PROTECTED SECTION.
+ METHODS:
+ get_object_type REDEFINITION,
+ get_upload REDEFINITION,
+ get_download REDEFINITION,
+ get_lock_object REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_ecsd DEFINITION
+ INHERITING FROM zcl_abapgit_object_ecatt_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ PROTECTED SECTION.
+ METHODS:
+ get_object_type REDEFINITION,
+ get_upload REDEFINITION,
+ get_download REDEFINITION,
+ get_lock_object REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_ecsp DEFINITION
+ INHERITING FROM zcl_abapgit_object_ecatt_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ PROTECTED SECTION.
+ METHODS:
+ get_object_type REDEFINITION,
+ get_upload REDEFINITION,
+ get_download REDEFINITION,
+ get_lock_object REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_ectc DEFINITION
+ INHERITING FROM zcl_abapgit_object_ecatt_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ PROTECTED SECTION.
+ METHODS:
+ get_object_type REDEFINITION,
+ get_upload REDEFINITION,
+ get_download REDEFINITION,
+ get_lock_object REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_ectd DEFINITION
+ INHERITING FROM zcl_abapgit_object_ecatt_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ PROTECTED SECTION.
+ METHODS:
+ get_object_type REDEFINITION,
+ get_upload REDEFINITION,
+ get_download REDEFINITION,
+ get_lock_object REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_ecvo DEFINITION
+ INHERITING FROM zcl_abapgit_object_ecatt_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ PROTECTED SECTION.
+ METHODS:
+ get_object_type REDEFINITION,
+ get_upload REDEFINITION,
+ get_download REDEFINITION,
+ get_lock_object REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_enhc DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA:
+ mv_composite_id TYPE enhcompositename.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enho DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS:
+ factory
+ IMPORTING
+ iv_tool TYPE enhtooltype
+ RETURNING
+ VALUE(ri_enho) TYPE REF TO zif_abapgit_object_enho
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enhs DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS:
+ factory
+ IMPORTING
+ iv_tool TYPE enhtooltype
+ RETURNING
+ VALUE(ri_enho) TYPE REF TO zif_abapgit_object_enhs
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_enqu DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: ty_dd27p TYPE STANDARD TABLE OF dd27p WITH DEFAULT KEY.
+
+ " Fields that are not part of dd25v
+ TYPES:
+ BEGIN OF ty_extra,
+ abap_language_version TYPE uccheck,
+ END OF ty_extra.
+
+ METHODS _clear_dd27p_fields CHANGING ct_dd27p TYPE ty_dd27p.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_ensc DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_fdt0 DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ METHODS check_is_local
+ RETURNING
+ VALUE(rv_is_local) TYPE abap_bool .
+ METHODS get_application_id
+ RETURNING
+ VALUE(rv_application_id) TYPE fdt_admn_0000s-application_id .
+ METHODS before_xml_deserialize
+ IMPORTING
+ !iv_package TYPE devclass
+ EXPORTING
+ !ev_create TYPE abap_bool
+ !ev_is_local TYPE abap_bool
+ CHANGING
+ !co_dom_tree TYPE REF TO if_ixml_document
+ RAISING
+ zcx_abapgit_exception .
+ METHODS filter_xml_serialize
+ CHANGING
+ !co_ixml_element TYPE REF TO if_ixml_element
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_field
+ IMPORTING
+ !iv_name TYPE string
+ !iv_value TYPE string DEFAULT ''
+ CHANGING
+ !co_ixml_element TYPE REF TO if_ixml_element
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_form DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS: c_objectname_form TYPE thead-tdobject VALUE 'FORM' ##NO_TEXT.
+ CONSTANTS: c_objectname_tdlines TYPE thead-tdobject VALUE 'TDLINES' ##NO_TEXT.
+ CONSTANTS: c_extension_xml TYPE string VALUE 'xml' ##NO_TEXT.
+ DATA: mv_form_name TYPE itcta-tdform.
+
+ TYPES: BEGIN OF ty_s_form_data,
+ form_header TYPE itcta,
+ text_header TYPE thead,
+ orig_language TYPE sy-langu,
+ pages TYPE STANDARD TABLE OF itctg WITH DEFAULT KEY,
+ page_windows TYPE STANDARD TABLE OF itcth WITH DEFAULT KEY,
+ paragraphs TYPE STANDARD TABLE OF itcdp WITH DEFAULT KEY,
+ strings TYPE STANDARD TABLE OF itcds WITH DEFAULT KEY,
+ tabs TYPE STANDARD TABLE OF itcdq WITH DEFAULT KEY,
+ windows TYPE STANDARD TABLE OF itctw WITH DEFAULT KEY,
+ END OF ty_s_form_data,
+ ty_t_form_data TYPE STANDARD TABLE OF ty_s_form_data WITH DEFAULT KEY,
+ ty_t_form_header TYPE STANDARD TABLE OF itcta WITH DEFAULT KEY,
+ ty_s_form_header TYPE LINE OF ty_t_form_header,
+ ty_t_text_header TYPE STANDARD TABLE OF thead WITH DEFAULT KEY,
+ ty_s_text_header TYPE LINE OF ty_t_text_header,
+ ty_t_lines TYPE tline_tab.
+
+ METHODS get_last_changes
+ IMPORTING
+ iv_form_name TYPE zif_abapgit_definitions=>ty_item-obj_name
+ RETURNING
+ VALUE(rs_last_changed) TYPE ty_s_form_header.
+
+ METHODS build_extra_from_header
+ IMPORTING
+ is_header TYPE ty_s_form_header
+ RETURNING
+ VALUE(rv_result) TYPE string.
+
+ METHODS build_extra_from_header_old
+ IMPORTING
+ is_header TYPE ty_s_form_header
+ RETURNING
+ VALUE(rv_result) TYPE string.
+
+ METHODS _save_form
+ IMPORTING
+ it_lines TYPE ty_t_lines
+ CHANGING
+ cs_form_data TYPE ty_s_form_data.
+
+ METHODS extract_tdlines
+ IMPORTING
+ is_form_data TYPE ty_s_form_data
+ RETURNING
+ VALUE(rt_lines) TYPE ty_t_lines
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS _clear_changed_fields
+ CHANGING
+ cs_form_data TYPE ty_s_form_data.
+
+ METHODS compress_lines
+ IMPORTING
+ is_form_data TYPE ty_s_form_data
+ it_lines TYPE ty_t_lines
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS find_form
+ IMPORTING
+ iv_object_name TYPE zif_abapgit_definitions=>ty_item-obj_name
+ RETURNING
+ VALUE(rt_text_header) TYPE ty_t_text_header.
+
+ METHODS _read_form
+ IMPORTING
+ is_text_header TYPE ty_s_text_header
+ EXPORTING
+ ev_form_found TYPE abap_bool
+ es_form_data TYPE ty_s_form_data
+ et_lines TYPE ty_t_lines.
+
+ METHODS _sort_tdlines_by_windows
+ CHANGING
+ ct_form_windows TYPE ty_s_form_data-windows
+ ct_lines TYPE ty_t_lines.
+
+ METHODS order_check_and_insert
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_object_ftgl DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA:
+ mv_toggle_id TYPE c LENGTH 40, "sftgl_ft_id
+ mr_toggle TYPE REF TO data.
+
+ METHODS:
+ clear_field
+ IMPORTING
+ iv_fieldname TYPE string
+ CHANGING
+ cg_header TYPE any.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_g4ba DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_g4bs DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_http DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object.
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES: BEGIN OF ty_uconservhttphandler,
+ id TYPE c LENGTH 30,
+ version TYPE c LENGTH 1,
+ serviceorder TYPE n LENGTH 2,
+ servicehandler TYPE c LENGTH 30,
+ END OF ty_uconservhttphandler.
+ TYPES: BEGIN OF ty_uconhttpservtext,
+ id TYPE c LENGTH 30,
+ version TYPE c LENGTH 1,
+ lang TYPE c LENGTH 1,
+ shorttext TYPE c LENGTH 255,
+ END OF ty_uconhttpservtext.
+ TYPES: BEGIN OF ty_handler,
+ id TYPE c LENGTH 30,
+ version TYPE c LENGTH 1,
+ serviceorder TYPE n LENGTH 2,
+ servicehandler TYPE c LENGTH 30,
+ END OF ty_handler.
+ TYPES: BEGIN OF ty_gs_object_version,
+ id TYPE c LENGTH 1,
+ object_state TYPE c LENGTH 1,
+ END OF ty_gs_object_version.
+
+ TYPES: BEGIN OF ty_icf_node,
+ icfname TYPE c LENGTH 15,
+ icfparguid TYPE c LENGTH 25,
+ END OF ty_icf_node.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_iamu DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_internet_appl_comp_binary,
+ attributes TYPE w3mimeattr,
+ source TYPE w3mimetabtype,
+ length TYPE i,
+ extension TYPE string,
+ END OF ty_internet_appl_comp_binary.
+
+ DATA: mi_mime_api TYPE REF TO if_w3_api_mime.
+
+ METHODS:
+ get_extension
+ IMPORTING
+ iv_name TYPE csequence
+ iv_data TYPE xstring
+ RETURNING
+ VALUE(rv_extension) TYPE string,
+
+ load_mime_api
+ RAISING
+ zcx_abapgit_exception,
+
+ read
+ RETURNING
+ VALUE(rs_internet_appl_comp_binary) TYPE ty_internet_appl_comp_binary
+ RAISING
+ zcx_abapgit_exception,
+
+ save
+ IMPORTING
+ is_internet_appl_comp_binary TYPE ty_internet_appl_comp_binary
+ RAISING
+ zcx_abapgit_exception,
+
+ lock
+ IMPORTING
+ iv_changable TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_iarp DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA:
+ ms_name TYPE w3resokey.
+
+ METHODS:
+ read
+ EXPORTING es_attributes TYPE w3resoattr
+ et_parameters TYPE w3resopara_tabletype
+ RAISING zcx_abapgit_exception,
+
+ save
+ IMPORTING is_attributes TYPE w3resoattr
+ it_parameters TYPE w3resopara_tabletype
+ RAISING zcx_abapgit_exception,
+
+ w3_api_load
+ RETURNING VALUE(ri_resource) TYPE REF TO if_w3_api_resource
+ RAISING zcx_abapgit_exception,
+
+ w3_api_get_attributes
+ IMPORTING ii_resource TYPE REF TO if_w3_api_resource
+ RETURNING VALUE(rs_attributes) TYPE w3resoattr
+ RAISING zcx_abapgit_exception,
+
+ w3_api_get_parameters
+ IMPORTING ii_resource TYPE REF TO if_w3_api_resource
+ RETURNING VALUE(rt_parameters) TYPE w3resopara_tabletype
+ RAISING zcx_abapgit_exception,
+
+ w3_api_create_new
+ IMPORTING is_attributes TYPE w3resoattr
+ RETURNING VALUE(ri_resource) TYPE REF TO if_w3_api_resource
+ RAISING zcx_abapgit_exception,
+
+ w3_api_set_attributes
+ IMPORTING ii_resource TYPE REF TO if_w3_api_resource
+ is_attributes TYPE w3resoattr
+ RAISING zcx_abapgit_exception,
+
+ w3_api_set_parameters
+ IMPORTING ii_resource TYPE REF TO if_w3_api_resource
+ it_parameters TYPE w3resopara_tabletype
+ RAISING zcx_abapgit_exception,
+
+ w3_api_save
+ IMPORTING ii_resource TYPE REF TO if_w3_api_resource
+ RAISING zcx_abapgit_exception,
+
+ w3_api_set_changeable
+ IMPORTING ii_resource TYPE REF TO if_w3_api_resource
+ iv_changeable TYPE abap_bool DEFAULT abap_true
+ RAISING zcx_abapgit_exception,
+
+ w3_api_delete
+ IMPORTING ii_resource TYPE REF TO if_w3_api_resource
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_iasp DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA:
+ mv_name TYPE itsappl.
+
+ METHODS:
+ read
+ EXPORTING es_attr TYPE w3servattr
+ et_parameters TYPE w3servpara_tabletype
+ RAISING zcx_abapgit_exception,
+
+ save
+ IMPORTING is_attr TYPE w3servattr
+ it_parameters TYPE w3servpara_tabletype
+ RAISING zcx_abapgit_exception,
+
+ w3_api_load
+ RETURNING VALUE(ri_service) TYPE REF TO if_w3_api_service
+ RAISING zcx_abapgit_exception,
+
+ w3_api_get_attributes
+ IMPORTING ii_service TYPE REF TO if_w3_api_service
+ RETURNING VALUE(rs_attributes) TYPE w3servattr,
+
+ w3_api_get_parameters
+ IMPORTING ii_service TYPE REF TO if_w3_api_service
+ RETURNING VALUE(rt_parameters) TYPE w3servpara_tabletype,
+
+ w3_api_create_new
+ IMPORTING is_attributes TYPE w3servattr
+ RETURNING VALUE(ri_service) TYPE REF TO if_w3_api_service
+ RAISING zcx_abapgit_exception,
+
+ w3_api_set_attributes
+ IMPORTING ii_service TYPE REF TO if_w3_api_service
+ is_attributes TYPE w3servattr
+ RAISING zcx_abapgit_exception,
+
+ w3_api_set_parameters
+ IMPORTING ii_service TYPE REF TO if_w3_api_service
+ it_parameters TYPE w3servpara_tabletype
+ RAISING zcx_abapgit_exception,
+
+ w3_api_save
+ IMPORTING ii_service TYPE REF TO if_w3_api_service
+ RAISING zcx_abapgit_exception,
+
+ w3_api_set_changeable
+ IMPORTING ii_service TYPE REF TO if_w3_api_service
+ iv_changeable TYPE abap_bool DEFAULT abap_true
+ RAISING zcx_abapgit_exception,
+
+ w3_api_delete
+ IMPORTING ii_service TYPE REF TO if_w3_api_service
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_iatu DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS:
+ read
+ EXPORTING es_attr TYPE w3tempattr
+ ev_source TYPE string
+ RAISING zcx_abapgit_exception,
+ save
+ IMPORTING
+ is_attr TYPE w3tempattr
+ iv_source TYPE string
+ RAISING zcx_abapgit_exception,
+ w3_api_load
+ IMPORTING is_name TYPE iacikeyt
+ RETURNING VALUE(ri_template) TYPE REF TO if_w3_api_template
+ RAISING zcx_abapgit_exception,
+ w3_api_set_changeable
+ IMPORTING iv_changeable TYPE abap_bool
+ ii_template TYPE REF TO if_w3_api_template
+ RAISING zcx_abapgit_exception,
+ w3_api_delete
+ IMPORTING ii_template TYPE REF TO if_w3_api_template
+ RAISING zcx_abapgit_exception,
+ w3_api_save
+ IMPORTING ii_template TYPE REF TO if_w3_api_template
+ RAISING zcx_abapgit_exception,
+ w3_api_get_attributes
+ IMPORTING ii_template TYPE REF TO if_w3_api_template
+ RETURNING VALUE(rs_attributes) TYPE w3tempattr
+ RAISING zcx_abapgit_exception,
+ w3_api_get_source
+ IMPORTING ii_template TYPE REF TO if_w3_api_template
+ RETURNING VALUE(rt_source) TYPE w3htmltabtype
+ RAISING zcx_abapgit_exception,
+ w3_api_create_new
+ IMPORTING is_template_data TYPE w3tempattr
+ RETURNING VALUE(ri_template) TYPE REF TO if_w3_api_template
+ RAISING zcx_abapgit_exception,
+ w3_api_set_attributes
+ IMPORTING ii_template TYPE REF TO if_w3_api_template
+ is_attr TYPE w3tempattr
+ RAISING zcx_abapgit_exception,
+ w3_api_set_source
+ IMPORTING ii_template TYPE REF TO if_w3_api_template
+ it_source TYPE w3htmltabtype
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_iaxu DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mv_source_style_2006 TYPE w3style VALUE 'XML',
+ mv_generator_class TYPE w3styleclass VALUE 'CL_ITS_GENERATE_XML3'.
+
+ METHODS:
+ read
+ RETURNING VALUE(rs_attr) TYPE w3tempattr
+ RAISING zcx_abapgit_exception,
+ save
+ IMPORTING is_attr TYPE w3tempattr
+ RAISING zcx_abapgit_exception,
+ w3_api_load
+ IMPORTING is_name TYPE iacikeyt
+ EXPORTING eo_xml_api TYPE REF TO object
+ es_attr TYPE w3tempattr
+ RAISING zcx_abapgit_exception,
+ w3_api_set_changeable
+ IMPORTING io_xml_api TYPE REF TO object
+ iv_changeable TYPE abap_bool
+ RAISING zcx_abapgit_exception,
+ w3_api_delete
+ IMPORTING io_xml_api TYPE REF TO object
+ RAISING zcx_abapgit_exception,
+ w3_api_save
+ IMPORTING io_xml_api TYPE REF TO object
+ RAISING zcx_abapgit_exception,
+ w3_api_create_new
+ IMPORTING is_attr TYPE w3tempattr
+ RETURNING VALUE(ro_xml_api) TYPE REF TO object
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_idoc DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS clear_idoc_segement_fields CHANGING cg_structure TYPE any.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_idoc,
+ attributes TYPE edi_iapi01,
+ t_syntax TYPE STANDARD TABLE OF edi_iapi02 WITH NON-UNIQUE DEFAULT KEY,
+ END OF ty_idoc.
+
+ DATA: mv_idoctyp TYPE edi_iapi00-idoctyp.
+
+ CLASS-METHODS clear_idoc_segement_field
+ IMPORTING iv_fieldname TYPE csequence
+ CHANGING cg_structure TYPE any.
+
+ METHODS is_closed
+ RETURNING
+ VALUE(rv_closed) TYPE abap_bool.
+ENDCLASS.
+CLASS zcl_abapgit_object_iext DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_extention,
+ attributes TYPE edi_iapi01,
+ t_syntax TYPE STANDARD TABLE OF edi_iapi03 WITH NON-UNIQUE DEFAULT KEY,
+ END OF ty_extention.
+
+ CONSTANTS c_dataname_iext TYPE string VALUE 'IEXT' ##NO_TEXT.
+ DATA: mv_extension TYPE edi_cimtyp.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_iobj DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS:
+ clear_field
+ IMPORTING
+ iv_fieldname TYPE string
+ CHANGING
+ cg_metadata TYPE any.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_iwmo DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_iwom DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_iwpr DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_iwsg DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_iwsv DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_iwvb DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_jobd DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: ty_jd_name TYPE c LENGTH 32.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_msag DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_t100_text,
+ sprsl TYPE t100-sprsl,
+ msgnr TYPE t100-msgnr,
+ text TYPE t100-text,
+ END OF ty_t100_text .
+ TYPES:
+ ty_t100_texts TYPE STANDARD TABLE OF ty_t100_text .
+ TYPES:
+ ty_t100s TYPE STANDARD TABLE OF t100
+ WITH NON-UNIQUE DEFAULT KEY .
+
+ CONSTANTS c_longtext_id_msag TYPE dokil-id VALUE 'NA'.
+
+ METHODS serialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_longtexts_msag
+ IMPORTING
+ !it_t100 TYPE ty_t100s
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete_msgid
+ IMPORTING
+ !iv_message_id TYPE arbgb
+ RAISING
+ zcx_abapgit_exception.
+ METHODS free_access_permission
+ IMPORTING
+ !iv_message_id TYPE arbgb .
+ METHODS delete_documentation
+ IMPORTING
+ !iv_message_id TYPE arbgb
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_object_nrob DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS:
+ delete_intervals IMPORTING iv_object TYPE inri-object
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_nspc DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_nspc,
+ namespace TYPE trnspacet-namespace,
+ replicense TYPE trnspacet-replicense,
+ sscrflag TYPE trnspacet-sscrflag,
+ sapflag TYPE trnspacet-sapflag,
+ gen_only TYPE trnspacet-gen_only,
+ END OF ty_nspc .
+ TYPES:
+ BEGIN OF ty_nspc_text,
+ spras TYPE trnspacett-spras,
+ descriptn TYPE trnspacett-descriptn,
+ owner TYPE trnspacett-owner,
+ END OF ty_nspc_text .
+ TYPES:
+ ty_nspc_texts TYPE STANDARD TABLE OF ty_nspc_text .
+
+ DATA mv_component TYPE cvers-component.
+
+ METHODS serialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ !iv_namespace TYPE namespace
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_to_transport
+ IMPORTING
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_sw_component
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_sw_component
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_oa2p DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mv_profile TYPE c LENGTH 30.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_odso DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS:
+ clear_field
+ IMPORTING
+ iv_fieldname TYPE string
+ CHANGING
+ cg_metadata TYPE any.
+ENDCLASS.
+CLASS zcl_abapgit_object_otgr DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_otgr,
+ cls_type_group TYPE cls_type_group,
+ texts TYPE STANDARD TABLE OF cls_type_groupt WITH DEFAULT KEY,
+ elements TYPE STANDARD TABLE OF cls_tygr_element WITH DEFAULT KEY,
+ END OF ty_otgr .
+
+ METHODS instantiate_and_lock_otgr
+ RETURNING
+ VALUE(ro_otgr) TYPE REF TO cl_cls_object_type_group
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_para DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS unlock
+ IMPORTING
+ !iv_paramid TYPE memoryid .
+
+ENDCLASS.
+CLASS zcl_abapgit_object_pdxx_super DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ ABSTRACT.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ DATA ms_objkey TYPE hrsobject.
+
+ METHODS check_subrc_for IMPORTING iv_call TYPE clike OPTIONAL
+ RAISING zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+
+ENDCLASS.
+INTERFACE iUFTsvrpxwdUTiJUSNzxoTkdegmNBa DEFERRED.
+* renamed: zcl_abapgit_object_pdts :: lif_task_definition
+INTERFACE iUFTsvrpxwdUTiJUSNzxoTkdegmNBa.
+
+ TYPES: BEGIN OF ty_task_data,
+ short_text TYPE hr_mcshort,
+ plvar TYPE plvar,
+ wi_text TYPE witext,
+ method TYPE hrs1201,
+ method_binding TYPE hrsmtbind,
+ starting_events TYPE hrsevtab,
+ starting_events_binding TYPE hrsevbind,
+ terminating_events TYPE hrsetmtab,
+ terminating_events_binding TYPE hrsevbind,
+ descriptions TYPE wstexts,
+ END OF ty_task_data.
+
+ METHODS clear_origin_data.
+ METHODS get_definition RETURNING VALUE(rs_result) TYPE ty_task_data.
+ METHODS get_container RETURNING VALUE(ri_result) TYPE REF TO if_swf_cnt_container.
+ METHODS get_user_container RETURNING VALUE(ri_result) TYPE REF TO if_swf_cnt_container.
+ METHODS import_container IMPORTING iv_xml_string TYPE xstring
+ RAISING zcx_abapgit_exception.
+ METHODS create_task RAISING zcx_abapgit_exception.
+ METHODS save IMPORTING iv_package TYPE devclass OPTIONAL
+ RAISING zcx_abapgit_exception.
+ METHODS change_wi_text RAISING zcx_abapgit_exception.
+ METHODS change_method RAISING zcx_abapgit_exception.
+ METHODS change_start_events RAISING zcx_abapgit_exception.
+ METHODS change_terminating_events RAISING zcx_abapgit_exception.
+ METHODS change_text RAISING zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+CLASS zcl_abapgit_object_pdts DEFINITION
+ INHERITING FROM zcl_abapgit_object_pdxx_super
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS zif_abapgit_object~serialize REDEFINITION.
+ METHODS zif_abapgit_object~deserialize REDEFINITION.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ DATA mv_objid TYPE hrobjid.
+
+ METHODS get_container_xml IMPORTING ii_task TYPE REF TO iUFTsvrpxwdUTiJUSNzxoTkdegmNBa
+ RETURNING VALUE(ri_first_element) TYPE REF TO if_ixml_element
+ RAISING zcx_abapgit_exception.
+
+ METHODS extract_container IMPORTING io_xml TYPE REF TO zif_abapgit_xml_input
+ RETURNING VALUE(rv_result) TYPE xstring.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_pers DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_personalization_object,
+ pers_reg TYPE spers_reg,
+ pers_reg_text TYPE spers_regt,
+ END OF ty_personalization_object.
+
+ DATA:
+ mv_pers_key TYPE spers_key.
+
+ METHODS:
+ get_personalization_object
+ IMPORTING
+ iv_create TYPE abap_bool OPTIONAL
+ iv_view_only TYPE abap_bool OPTIONAL
+ RETURNING
+ VALUE(ro_personalization_object) TYPE REF TO cl_pers_reg
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS kHGwlqJyKbsVHldwKaGddDbbHeNaet DEFINITION DEFERRED.
+INTERFACE iUFTsqJyKbsVHldwKaGdXoRoiJNIwT DEFERRED.
+* renamed: zcl_abapgit_object_pinf :: lif_package_interface_facade
+INTERFACE iUFTsqJyKbsVHldwKaGdXoRoiJNIwT.
+ TYPES ty_tpak_package_interf_elem_tt TYPE STANDARD TABLE OF tpak_package_interf_elem_ref WITH DEFAULT KEY.
+
+ METHODS:
+ get_elements
+ RETURNING
+ VALUE(rt_elements) TYPE ty_tpak_package_interf_elem_tt
+ RAISING
+ zcx_abapgit_exception,
+
+ set_elements_changeable
+ IMPORTING
+ iv_changeable TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception,
+
+ save_elements
+ RAISING
+ zcx_abapgit_exception,
+
+ get_all_attributes
+ RETURNING
+ VALUE(rs_package_interface_data) TYPE scompidtln
+ RAISING
+ zcx_abapgit_exception,
+
+ set_changeable
+ IMPORTING
+ iv_changeable TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception,
+
+ delete
+ RAISING
+ zcx_abapgit_exception,
+
+ save
+ RAISING
+ zcx_abapgit_exception,
+
+ remove_elements
+ IMPORTING
+ it_elements TYPE tpak_package_interf_elem_list
+ RAISING
+ zcx_abapgit_exception,
+
+ add_elements
+ IMPORTING
+ it_elements_data TYPE scomeldata
+ RAISING
+ zcx_abapgit_exception,
+
+ set_all_attributes
+ IMPORTING
+ is_package_interface_data TYPE scompidtln
+ is_data_sign TYPE scompisign
+ RAISING
+ zcx_abapgit_exception,
+
+ get_changeable
+ RETURNING
+ VALUE(rv_changeable) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ENDINTERFACE.
+
+* renamed: zcl_abapgit_object_pinf :: lcl_package_interface_facade
+CLASS kHGwlqJyKbsVHldwKaGddDbbHeNaet DEFINITION.
+
+ PUBLIC SECTION.
+ INTERFACES:
+ iUFTsqJyKbsVHldwKaGdXoRoiJNIwT.
+
+ METHODS:
+ constructor
+ IMPORTING
+ ii_interface TYPE REF TO if_package_interface.
+
+ PRIVATE SECTION.
+ DATA: mi_interface TYPE REF TO if_package_interface.
+
+ENDCLASS.
+
+CLASS zcl_abapgit_object_pinf DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_pinf,
+ attributes TYPE scompidtln,
+ elements TYPE STANDARD TABLE OF scomeldtln WITH DEFAULT KEY,
+ END OF ty_pinf .
+ TYPES:
+ ty_elements TYPE STANDARD TABLE OF tpak_package_interf_elem_ref WITH DEFAULT KEY .
+
+ METHODS create_or_load
+ IMPORTING
+ !is_pinf TYPE ty_pinf
+ !iv_package TYPE devclass
+ RETURNING
+ VALUE(ri_interface) TYPE REF TO iUFTsqJyKbsVHldwKaGdXoRoiJNIwT
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete_elements
+ IMPORTING
+ !ii_interface TYPE REF TO iUFTsqJyKbsVHldwKaGdXoRoiJNIwT
+ RAISING
+ zcx_abapgit_exception .
+ METHODS update_attributes
+ IMPORTING
+ !iv_package TYPE devclass
+ !is_pinf TYPE ty_pinf
+ !ii_interface TYPE REF TO iUFTsqJyKbsVHldwKaGdXoRoiJNIwT
+ RAISING
+ zcx_abapgit_exception .
+ METHODS update_elements
+ IMPORTING
+ !iv_package TYPE devclass
+ !is_pinf TYPE ty_pinf
+ !ii_interface TYPE REF TO iUFTsqJyKbsVHldwKaGdXoRoiJNIwT
+ RAISING
+ zcx_abapgit_exception .
+ METHODS load
+ IMPORTING
+ iv_name TYPE scomifnam
+ RETURNING
+ VALUE(ri_interface) TYPE REF TO iUFTsqJyKbsVHldwKaGdXoRoiJNIwT.
+ METHODS create_facade
+ IMPORTING
+ ii_interface TYPE REF TO if_package_interface
+ RETURNING
+ VALUE(ri_facade) TYPE REF TO iUFTsqJyKbsVHldwKaGdXoRoiJNIwT.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_prag DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_pragma,
+ pragma TYPE c LENGTH 40,
+ extension TYPE c LENGTH 1,
+ signature TYPE c LENGTH 10,
+ description TYPE c LENGTH 255,
+ END OF ty_pragma.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_saxx_super DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ ABSTRACT
+ CREATE PUBLIC .
+
+* common class for SAPC and SAMC objects
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL.
+
+ PROTECTED SECTION.
+
+ METHODS get_persistence_class_name ABSTRACT
+ RETURNING
+ VALUE(rv_persistence_class_name) TYPE seoclsname .
+ METHODS get_data_class_name ABSTRACT
+ RETURNING
+ VALUE(rv_data_class_name) TYPE seoclsname .
+ METHODS get_data_structure_name ABSTRACT
+ RETURNING
+ VALUE(rv_data_structure_name) TYPE string .
+ METHODS get_lock_object ABSTRACT
+ RETURNING
+ VALUE(rv_lock_object) TYPE string.
+ METHODS create_channel_objects
+ RAISING
+ zcx_abapgit_type_not_supported .
+
+ PRIVATE SECTION.
+
+ DATA mi_persistence TYPE REF TO if_wb_object_persist .
+ DATA mi_appl_obj_data TYPE REF TO if_wb_object_data_model .
+ DATA mv_data_structure_name TYPE string .
+ DATA mv_appl_obj_cls_name TYPE seoclsname .
+ DATA mv_persistence_cls_name TYPE seoclsname .
+ DATA mv_object_key TYPE seu_objkey .
+
+ METHODS get_data
+ EXPORTING
+ !eg_data TYPE any
+ RAISING
+ zcx_abapgit_exception .
+ METHODS lock
+ RAISING
+ zcx_abapgit_exception .
+ METHODS unlock
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_names .
+
+ENDCLASS.
+CLASS zcl_abapgit_object_samc DEFINITION
+ INHERITING FROM zcl_abapgit_object_saxx_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+
+ METHODS get_data_class_name
+ REDEFINITION .
+ METHODS get_data_structure_name
+ REDEFINITION .
+ METHODS get_persistence_class_name
+ REDEFINITION .
+ METHODS get_lock_object
+ REDEFINITION .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_sapc DEFINITION
+ INHERITING FROM zcl_abapgit_object_saxx_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+
+ METHODS get_data_class_name
+ REDEFINITION .
+ METHODS get_data_structure_name
+ REDEFINITION .
+ METHODS get_persistence_class_name
+ REDEFINITION .
+ METHODS get_lock_object
+ REDEFINITION .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_scp1 DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ TYPES:
+ BEGIN OF ty_scp1,
+ scprattr TYPE scprattr,
+ scprtext TYPE STANDARD TABLE OF scprtext WITH DEFAULT KEY,
+ scprvals TYPE STANDARD TABLE OF scprvals WITH DEFAULT KEY,
+ scprvall TYPE STANDARD TABLE OF scprvall WITH DEFAULT KEY,
+ scprreca TYPE STANDARD TABLE OF scprreca WITH DEFAULT KEY,
+ scprfldv TYPE STANDARD TABLE OF scprfldv WITH DEFAULT KEY,
+ subprofs TYPE STANDARD TABLE OF scprpprl WITH DEFAULT KEY,
+ END OF ty_scp1 .
+
+ METHODS dequeue .
+ METHODS enqueue
+ RAISING
+ zcx_abapgit_exception .
+ METHODS save
+ IMPORTING
+ !is_scp1 TYPE ty_scp1
+ RAISING
+ zcx_abapgit_exception .
+ METHODS save_hier
+ IMPORTING
+ !is_scp1 TYPE ty_scp1
+ RAISING
+ zcx_abapgit_exception .
+ METHODS adjust_inbound
+ CHANGING
+ !cs_scp1 TYPE ty_scp1 .
+ METHODS adjust_outbound
+ CHANGING
+ !cs_scp1 TYPE ty_scp1 .
+ METHODS load
+ CHANGING
+ !cs_scp1 TYPE ty_scp1 .
+ METHODS load_hier
+ CHANGING
+ !cs_scp1 TYPE ty_scp1 .
+ METHODS call_delete_fms
+ IMPORTING
+ !iv_profile_id TYPE scpr_id
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_scvi DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_screen_variant,
+ shdsvci TYPE shdsvci,
+ shdsvtxci TYPE STANDARD TABLE OF shdsvtxci WITH DEFAULT KEY,
+ shdsvfvci TYPE STANDARD TABLE OF shdsvfvci WITH DEFAULT KEY,
+ shdguixt TYPE STANDARD TABLE OF shdguixt WITH DEFAULT KEY,
+ shdgxtcode TYPE STANDARD TABLE OF shdgxtcode WITH DEFAULT KEY,
+ END OF ty_screen_variant .
+ENDCLASS.
+CLASS zcl_abapgit_object_sfbf DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_longtext_id_sfbf TYPE dokil-id VALUE 'BF'.
+
+ DATA mv_bf TYPE sfw_bfunction.
+
+ METHODS:
+ unlock,
+ activate
+ RAISING zcx_abapgit_exception,
+ create
+ RETURNING VALUE(ro_bf) TYPE REF TO cl_sfw_bf
+ RAISING zcx_abapgit_exception,
+ get
+ RETURNING VALUE(ro_bf) TYPE REF TO cl_sfw_bf
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_sfbs DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_longtext_id_sfbs TYPE dokil-id VALUE 'BS'.
+
+ DATA mv_bfset TYPE sfw_bset.
+
+ METHODS:
+ unlock,
+ activate
+ RAISING zcx_abapgit_exception,
+ create
+ RETURNING VALUE(ro_bfs) TYPE REF TO cl_sfw_bfs
+ RAISING zcx_abapgit_exception,
+ get
+ RETURNING VALUE(ro_bfs) TYPE REF TO cl_sfw_bfs
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_sfpf DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ CLASS-METHODS fix_oref
+ IMPORTING
+ !ii_document TYPE REF TO if_ixml_document
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_layout_file_ext TYPE string VALUE 'xdp'.
+
+ METHODS:
+ load
+ RETURNING VALUE(ri_wb_form) TYPE REF TO if_fp_wb_form
+ RAISING zcx_abapgit_exception,
+ form_to_xstring
+ RETURNING VALUE(rv_xstr) TYPE xstring
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_sfpi DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS:
+ load
+ RETURNING VALUE(ri_wb_interface) TYPE REF TO if_fp_wb_interface
+ RAISING zcx_abapgit_exception,
+ interface_to_xstring
+ RETURNING VALUE(rv_xstr) TYPE xstring
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_sfsw DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_longtext_id_sfsw TYPE dokil-id VALUE 'SW'.
+
+ DATA mv_switch TYPE sfw_switch_id.
+
+ METHODS:
+ unlock,
+ activate
+ RAISING zcx_abapgit_exception,
+ create
+ RETURNING VALUE(ro_switch) TYPE REF TO cl_sfw_sw
+ RAISING zcx_abapgit_exception,
+ get
+ RETURNING VALUE(ro_switch) TYPE REF TO cl_sfw_sw
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_shi3 DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ METHODS has_authorization
+ IMPORTING
+ !iv_devclass TYPE devclass
+ !iv_structure_id TYPE hier_guid
+ !iv_activity TYPE activ_auth
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_used
+ IMPORTING
+ !iv_structure_id TYPE hier_guid
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete_tree_structure
+ IMPORTING
+ !iv_structure_id TYPE hier_guid .
+ PRIVATE SECTION.
+
+ DATA mv_tree_id TYPE ttree-id.
+
+ METHODS insert_transport
+ IMPORTING
+ !iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception.
+ METHODS jump_se43
+ RAISING
+ zcx_abapgit_exception.
+ METHODS jump_sbach04
+ RAISING
+ zcx_abapgit_exception.
+ METHODS clear_fields
+ CHANGING
+ !cs_head TYPE ttree
+ !ct_nodes TYPE hier_iface_t.
+ENDCLASS.
+CLASS zcl_abapgit_object_shi5 DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: ty_ttree_extt TYPE STANDARD TABLE OF ttree_extt
+ WITH NON-UNIQUE DEFAULT KEY,
+ BEGIN OF ty_extension,
+ header TYPE ttree_ext,
+ texts TYPE ty_ttree_extt,
+ sequences TYPE STANDARD TABLE OF ttrees WITH NON-UNIQUE DEFAULT KEY,
+ END OF ty_extension.
+
+ DATA: mv_extension TYPE hier_names.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_shi8 DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mv_assignment_id TYPE hier_sfw_id.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_shlp DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS handle_dependencies
+ IMPORTING
+ !iv_step TYPE zif_abapgit_objects=>ty_deserialization_step
+ CHANGING
+ !cv_exit TYPE dd30v-selmexit
+ !cv_done TYPE abap_bool.
+
+ METHODS adjust_exit
+ CHANGING
+ !cv_exit TYPE dd30v-selmexit.
+
+ METHODS check_exit
+ IMPORTING
+ !iv_exit TYPE dd30v-selmexit
+ RETURNING
+ VALUE(rv_done) TYPE abap_bool.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_shma DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_sicf DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES ty_hash TYPE c LENGTH 25.
+
+ TYPES:
+ ty_icfhandler_tt TYPE STANDARD TABLE OF icfhandler WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_sicf_key,
+ icf_name TYPE icfservice-icf_name,
+ icfparguid TYPE icfservice-icfparguid,
+ END OF ty_sicf_key .
+
+ METHODS serialize_otr
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_otr
+ IMPORTING
+ !iv_package TYPE devclass
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read
+ IMPORTING
+ !iv_clear TYPE abap_bool DEFAULT abap_true
+ EXPORTING
+ !es_icfservice TYPE icfservice
+ !es_icfdocu TYPE icfdocu
+ !et_icfhandler TYPE ty_icfhandler_tt
+ !ev_url TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS insert_sicf
+ IMPORTING
+ !is_icfservice TYPE icfservice
+ !is_icfdocu TYPE icfdocu
+ !it_icfhandler TYPE ty_icfhandler_tt
+ !iv_package TYPE devclass
+ !iv_url TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS change_sicf
+ IMPORTING
+ !is_icfservice TYPE icfservice
+ !is_icfdocu TYPE icfdocu
+ !it_icfhandler TYPE ty_icfhandler_tt
+ !iv_package TYPE devclass
+ !iv_parent TYPE icfparguid
+ RAISING
+ zcx_abapgit_exception .
+ METHODS to_icfhndlist
+ IMPORTING
+ !it_list TYPE ty_icfhandler_tt
+ RETURNING
+ VALUE(rt_list) TYPE icfhndlist .
+ METHODS find_parent
+ IMPORTING
+ !iv_url TYPE string
+ RETURNING
+ VALUE(rv_parent) TYPE icfparguid
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS get_hash_from_object
+ IMPORTING
+ !iv_obj_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_hash) TYPE ty_hash
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS get_icfaltname
+ IMPORTING
+ !is_icfservice TYPE icfservice
+ RETURNING
+ VALUE(rv_icfaltnme) TYPE icfservice-icfaltnme.
+ENDCLASS.
+CLASS zcl_abapgit_object_sktd DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mr_data TYPE REF TO data .
+ DATA mv_object_key TYPE seu_objkey .
+ DATA mi_persistence TYPE REF TO if_wb_object_persist .
+ DATA mi_wb_object_operator TYPE REF TO object .
+
+ METHODS clear_fields
+ CHANGING
+ !cs_data TYPE any .
+ METHODS clear_field
+ IMPORTING
+ !iv_fieldname TYPE csequence
+ CHANGING
+ !cs_data TYPE any .
+ METHODS get_wb_object_operator
+ RETURNING
+ VALUE(ri_wb_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_smim DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS get_filename
+ IMPORTING iv_url TYPE string
+ RETURNING VALUE(rv_filename) TYPE string.
+
+ METHODS find_content
+ IMPORTING iv_url TYPE string
+ RETURNING VALUE(rv_content) TYPE xstring
+ RAISING zcx_abapgit_exception.
+
+ METHODS build_filename
+ IMPORTING iv_filename TYPE string
+ RETURNING VALUE(rv_filename) TYPE string.
+
+ METHODS get_url_for_io
+ EXPORTING ev_url TYPE string
+ ev_is_folder TYPE abap_bool
+ RAISING zcx_abapgit_not_found
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_smtg DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA:
+ mv_template_id TYPE c LENGTH 30,
+ mo_structdescr TYPE REF TO cl_abap_structdescr.
+
+ METHODS:
+ clear_field
+ IMPORTING
+ iv_fieldname TYPE string
+ CHANGING
+ cg_header TYPE any,
+
+ get_structure
+ RETURNING
+ VALUE(ro_structdescr) TYPE REF TO cl_abap_structdescr
+ RAISING
+ zcx_abapgit_exception,
+
+ add_component
+ IMPORTING
+ iv_fielname TYPE string
+ iv_structure_name TYPE string
+ CHANGING
+ ct_components TYPE abap_component_tab
+ RAISING
+ zcx_abapgit_exception,
+
+ get_template
+ EXPORTING
+ es_template TYPE any
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_sobj DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ri_rules) TYPE REF TO zif_abapgit_field_rules.
+ METHODS is_locked RETURNING VALUE(rv_is_locked) TYPE abap_bool.
+ METHODS is_objtype_locked RETURNING VALUE(rv_is_locked) TYPE abap_bool.
+ METHODS is_program_locked RETURNING VALUE(rv_is_locked) TYPE abap_bool.
+ METHODS get_program RETURNING VALUE(rv_program) TYPE tojtb-progname.
+ENDCLASS.
+CLASS zcl_abapgit_object_sod1 DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS: c_xml_transformation_name TYPE string VALUE 'SOD1',
+ c_data_model_class_name TYPE string VALUE 'CL_APS_ODA_WBI_SOD1_DATA_MODEL'.
+
+ METHODS create_wb_object_operator
+ IMPORTING
+ !is_object_type TYPE wbobjtype
+ !iv_object_key TYPE seu_objkey
+ !iv_transport_request TYPE trkorr OPTIONAL
+ !iv_do_commits TYPE abap_bool DEFAULT abap_true
+ !iv_run_in_test_mode TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_wb_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_wb_object_operator
+ IMPORTING
+ !is_object_type TYPE wbobjtype
+ !iv_object_key TYPE seu_objkey
+ !iv_transport_request TYPE trkorr OPTIONAL
+ RETURNING
+ VALUE(ro_wb_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS clear_metadata_fields
+ CHANGING
+ !cs_data TYPE any.
+
+ METHODS clear_content_fields
+ CHANGING
+ !cs_data TYPE any.
+
+ METHODS clear_field
+ IMPORTING
+ !iv_fieldname TYPE csequence
+ CHANGING
+ !cs_metadata TYPE any.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_sod2 DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS: c_xml_transformation_name TYPE string VALUE 'SOD2',
+ c_data_model_class_name TYPE string VALUE 'CL_APS_ODA_WBI_SOD2_DATA_MODEL'.
+
+ METHODS create_wb_object_operator
+ IMPORTING
+ !is_object_type TYPE wbobjtype
+ !iv_object_key TYPE seu_objkey
+ !iv_transport_request TYPE trkorr OPTIONAL
+ !iv_do_commits TYPE abap_bool DEFAULT abap_true
+ !iv_run_in_test_mode TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_wb_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_wb_object_operator
+ IMPORTING
+ !is_object_type TYPE wbobjtype
+ !iv_object_key TYPE seu_objkey
+ !iv_transport_request TYPE trkorr OPTIONAL
+ RETURNING
+ VALUE(ro_wb_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS clear_metadata_fields
+ CHANGING
+ !cs_data TYPE any.
+
+ METHODS clear_content_fields
+ CHANGING
+ !cs_data TYPE any.
+
+ METHODS clear_field
+ IMPORTING
+ !iv_fieldname TYPE csequence
+ CHANGING
+ !cs_metadata TYPE any.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_sots DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_sots,
+ header TYPE sotr_headu,
+ entries TYPE sotr_textl_tt,
+ END OF ty_sots,
+ ty_sots_tt TYPE STANDARD TABLE OF ty_sots
+ WITH NON-UNIQUE DEFAULT KEY.
+
+ METHODS:
+ read_sots
+ RETURNING
+ VALUE(rt_sots) TYPE ty_sots_tt,
+
+ create_sots
+ IMPORTING
+ is_sots TYPE ty_sots
+ iv_package TYPE devclass
+ iv_object TYPE trobjtype
+ RAISING
+ zcx_abapgit_exception,
+
+ get_raw_text_filename
+ IMPORTING
+ is_entry TYPE sotr_textl
+ RETURNING
+ VALUE(rv_filename) TYPE string.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_splo DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_sppf DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_sprx DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_proxy,
+ data TYPE string VALUE 'PROXY_DATA' ##NO_TEXT,
+ header TYPE string VALUE 'PROXY_HEADER' ##NO_TEXT,
+ END OF c_proxy .
+ DATA mv_object TYPE sproxhdr-object .
+ DATA mv_obj_name TYPE sproxhdr-obj_name .
+
+ METHODS load_db
+ RETURNING
+ VALUE(rs_data) TYPE sprx_db_data .
+ METHODS get_object_and_name
+ EXPORTING
+ !ev_object TYPE sproxhdr-object
+ !ev_obj_name TYPE sproxhdr-obj_name .
+ METHODS delta_handling
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ EXPORTING
+ !et_sproxhdr_new TYPE sprx_hdr_t
+ !et_sproxdat_new TYPE sprx_dat_t
+ RAISING
+ zcx_abapgit_exception .
+ METHODS check_sprx_tadir
+ RAISING
+ zcx_abapgit_exception .
+ METHODS save
+ IMPORTING
+ !it_sproxhdr_new TYPE sprx_hdr_t
+ !it_sproxdat_new TYPE sprx_dat_t .
+ENDCLASS.
+CLASS zcl_abapgit_object_sqsc DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ " Downport original structures from
+ " - IF_DBPROC_PROXY_UI
+ " - IF_DBPROC_PROXY_BASIC_TYPES
+
+ TYPES:
+ ty_db_name TYPE c LENGTH 256,
+ ty_abap_name TYPE c LENGTH 30,
+ ty_param_direction TYPE c LENGTH 10,
+ ty_param_kind TYPE c LENGTH 10,
+ ty_ddic_name TYPE ddobjname,
+
+ BEGIN OF ty_db_simple_type_s,
+ name TYPE ty_db_name,
+ length TYPE i,
+ decs TYPE i,
+ END OF ty_db_simple_type_s,
+
+ BEGIN OF ty_abap_simple_type_s,
+ name TYPE ty_abap_name,
+ length TYPE i,
+ decs TYPE i,
+ END OF ty_abap_simple_type_s,
+
+ BEGIN OF ty_abap_simple_type_ui_s,
+ typ TYPE ty_abap_simple_type_s,
+ text TYPE string,
+ END OF ty_abap_simple_type_ui_s,
+
+ BEGIN OF ty_header_ui_s,
+ db_repository_package TYPE ty_db_name,
+ db_repository_proc_name TYPE ty_db_name,
+ db_catalog_schema TYPE ty_db_name,
+ db_catalog_proc_name TYPE ty_db_name,
+ read_only TYPE abap_bool,
+ interface_pool TYPE ty_abap_name,
+ END OF ty_header_ui_s,
+
+ BEGIN OF ty_param_ui_s,
+ position TYPE i,
+ db_name TYPE ty_db_name,
+ direction TYPE ty_param_direction,
+ kind TYPE ty_param_kind,
+ db_table_type_schema TYPE ty_db_name,
+ db_table_type_name TYPE ty_db_name,
+ db_table_type_is_ddic TYPE abap_bool,
+ transfer_table_schema TYPE ty_db_name,
+ transfer_table_name TYPE ty_db_name,
+ abap_name TYPE ty_abap_name,
+ abap_name_is_ro TYPE abap_bool,
+ ddic_table TYPE ty_ddic_name,
+ ddic_table_is_ro TYPE abap_bool,
+ END OF ty_param_ui_s,
+ ty_param_ui_t TYPE STANDARD TABLE OF ty_param_ui_s WITH KEY position,
+
+ ty_abap_simple_type_ui_t TYPE STANDARD TABLE OF ty_abap_simple_type_ui_s WITH DEFAULT KEY,
+
+ BEGIN OF ty_param_type_ui_s,
+ param_position TYPE i,
+ comp_index TYPE i,
+ db_comp_name TYPE ty_db_name,
+ abap_comp_name TYPE ty_abap_name,
+ abap_comp_name_is_ro TYPE abap_bool,
+ db_type TYPE ty_db_simple_type_s,
+ db_type_text TYPE string,
+ abap_type TYPE ty_abap_simple_type_ui_s,
+ abap_type_is_ro TYPE abap_bool,
+ abap_type_selection TYPE ty_abap_simple_type_ui_t,
+ ddic_type TYPE ty_ddic_name,
+ ddic_type_is_ro TYPE abap_bool,
+ END OF ty_param_type_ui_s ,
+ ty_param_type_ui_t TYPE STANDARD TABLE OF ty_param_type_ui_s WITH KEY param_position comp_index,
+
+ BEGIN OF ty_proxy,
+ description TYPE ddtext,
+ header TYPE ty_header_ui_s,
+ parameters TYPE ty_param_ui_t,
+ parameter_types TYPE ty_param_type_ui_t,
+ END OF ty_proxy.
+
+ DATA:
+ mo_proxy TYPE REF TO object.
+
+ METHODS:
+ delete_interface_if_it_exists
+ IMPORTING
+ iv_package TYPE devclass
+ iv_transport TYPE trkorr
+ iv_interface TYPE ty_abap_name
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_object_srfc DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_srvb DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS:
+ clear_fields
+ CHANGING
+ cs_service_binding TYPE any,
+
+ clear_field
+ IMPORTING
+ iv_fieldname TYPE csequence
+ CHANGING
+ cs_service_binding TYPE any.
+ METHODS get_wb_object_operator
+ RETURNING
+ VALUE(ro_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception .
+ METHODS merge_object_data
+ IMPORTING
+ !io_object_data TYPE REF TO object
+ RETURNING
+ VALUE(ro_object_data_merged) TYPE REF TO if_wb_object_data_model
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_object_data
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RETURNING
+ VALUE(ro_object_data) TYPE REF TO if_wb_object_data_model
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_ai_supported
+ RETURNING VALUE(rv_ai_supported) TYPE abap_bool.
+
+ DATA:
+ mi_persistence TYPE REF TO if_wb_object_persist,
+ mv_is_inactive_supported TYPE abap_bool,
+ mv_service_binding_key TYPE seu_objkey,
+ mr_service_binding TYPE REF TO data,
+ mr_srvb_svrs_config TYPE REF TO object,
+ mo_object_operator TYPE REF TO object.
+ENDCLASS.
+CLASS zcl_abapgit_object_srvd DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ DATA mv_service_definition_key TYPE seu_objkey .
+ DATA mr_service_definition TYPE REF TO data .
+ CONSTANTS c_source_file TYPE string VALUE 'srvdsrv' ##NO_TEXT.
+ CONSTANTS c_xml_parent_name TYPE string VALUE 'SRVD' ##NO_TEXT.
+ DATA mo_object_operator TYPE REF TO object .
+
+ METHODS clear_fields
+ CHANGING
+ !cs_metadata TYPE any .
+ METHODS clear_field
+ IMPORTING
+ !iv_fieldname TYPE csequence
+ CHANGING
+ !cs_metadata TYPE any .
+ METHODS get_object_data
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RETURNING
+ VALUE(ro_object_data) TYPE REF TO if_wb_object_data_model
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_wb_object_operator
+ RETURNING
+ VALUE(ro_object_operator) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception .
+ METHODS merge_object_data
+ IMPORTING
+ !io_object_data TYPE REF TO object
+ RETURNING
+ VALUE(ro_object_data_merged) TYPE REF TO if_wb_object_data_model
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_ssfo DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ ty_string_range TYPE RANGE OF string .
+
+ CLASS-DATA gt_range_node_codes TYPE ty_string_range .
+ CONSTANTS c_prefix TYPE string VALUE 'File:'.
+
+ METHODS fix_ids
+ IMPORTING
+ !ii_xml_doc TYPE REF TO if_ixml_document .
+ CLASS-METHODS sort_texts
+ IMPORTING
+ !ii_xml_doc TYPE REF TO if_ixml_document
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_range_node_codes
+ RETURNING
+ VALUE(rt_range_node_codes) TYPE ty_string_range .
+ METHODS deserialize_sources
+ IMPORTING
+ !ii_node TYPE REF TO if_ixml_node
+ RAISING
+ zcx_abapgit_exception.
+ METHODS serialize_sources
+ IMPORTING
+ !ii_node TYPE REF TO if_ixml_node
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_hash_for_path
+ IMPORTING
+ !ii_node TYPE REF TO if_ixml_node
+ RETURNING
+ VALUE(rv_hash) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_object_ssst DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ CONSTANTS: c_style_active TYPE tdactivate VALUE 'A'.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ METHODS validate_font
+ IMPORTING iv_tdfamily TYPE tdfamily
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_stvi DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_transaction_variant,
+ shdtvciu TYPE shdtvciu,
+ shdttciu TYPE STANDARD TABLE OF shdttciu WITH DEFAULT KEY,
+ shdfvguicu TYPE STANDARD TABLE OF shdfvguicu WITH DEFAULT KEY,
+ shdtvsvciu TYPE STANDARD TABLE OF shdtvsvciu WITH DEFAULT KEY,
+ END OF ty_transaction_variant.
+ENDCLASS.
+CLASS zcl_abapgit_object_styl DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_style,
+ header TYPE itcda,
+ paragraphs TYPE STANDARD TABLE OF itcdp WITH DEFAULT KEY,
+ strings TYPE STANDARD TABLE OF itcds WITH DEFAULT KEY,
+ tabs TYPE STANDARD TABLE OF itcdq WITH DEFAULT KEY,
+ END OF ty_style.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_sucu DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_susc DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+
+ CONSTANTS c_transobjecttype_class TYPE c LENGTH 1 VALUE 'C' ##NO_TEXT.
+
+ METHODS has_authorization
+ IMPORTING
+ !iv_class TYPE tobc-oclss
+ !iv_activity TYPE activ_auth
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_used
+ IMPORTING
+ !iv_auth_object_class TYPE tobc-oclss
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+
+ METHODS delete_class
+ IMPORTING
+ !iv_auth_object_class TYPE tobc-oclss .
+ METHODS put_delete_to_transport
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_sush DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+ METHODS clear_metadata
+ CHANGING
+ cs_data_head TYPE any
+ ct_usobx TYPE STANDARD TABLE
+ ct_usobt TYPE STANDARD TABLE
+ ct_usobx_ext TYPE STANDARD TABLE
+ ct_usobt_ext TYPE STANDARD TABLE.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_suso DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS c_longtext_id_suso TYPE dokil-id VALUE 'UO'.
+
+ DATA:
+ mv_objectname TYPE tobj-objct.
+
+ METHODS:
+ delete_documentation
+ RAISING
+ zcx_abapgit_exception,
+
+ pre_check
+ RAISING
+ zcx_abapgit_exception,
+
+ regenerate_sap_all.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_sxci DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_classic_badi_implementation,
+ implementation_data TYPE impl_data,
+ function_codes TYPE seex_fcode_table,
+ control_composites TYPE seex_coco_table,
+ customer_includes TYPE seex_table_table,
+ screens TYPE seex_screen_table,
+ filters TYPE seex_filter_table,
+ END OF ty_classic_badi_implementation.
+ENDCLASS.
+CLASS zcl_abapgit_object_sxsd DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA ms_badi_attr TYPE sxc_attr.
+ENDCLASS.
+CLASS zcl_abapgit_object_tobj DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_tobj,
+ tddat TYPE tddat,
+ tvdir TYPE tvdir,
+ tvimf TYPE STANDARD TABLE OF tvimf WITH DEFAULT KEY,
+ END OF ty_tobj.
+
+ METHODS:
+ read_extra IMPORTING iv_tabname TYPE vim_name
+ RETURNING VALUE(rs_tobj) TYPE ty_tobj,
+ update_extra IMPORTING is_tobj TYPE ty_tobj,
+ delete_extra IMPORTING iv_tabname TYPE vim_name.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_tran DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+ TYPES:
+ ty_param_values TYPE STANDARD TABLE OF rsparam
+ WITH NON-UNIQUE DEFAULT KEY ,
+ ty_tstca TYPE STANDARD TABLE OF tstca
+ WITH DEFAULT KEY.
+
+ CONSTANTS:
+ c_oo_program TYPE c LENGTH 9 VALUE '\PROGRAM=' ##NO_TEXT,
+ c_oo_class TYPE c LENGTH 7 VALUE '\CLASS=' ##NO_TEXT,
+ c_oo_method TYPE c LENGTH 8 VALUE '\METHOD=' ##NO_TEXT,
+ c_oo_tcode TYPE tcode VALUE 'OS_APPLICATION' ##NO_TEXT,
+ c_oo_frclass TYPE c LENGTH 30 VALUE 'CLASS' ##NO_TEXT,
+ c_oo_frmethod TYPE c LENGTH 30 VALUE 'METHOD' ##NO_TEXT,
+ c_oo_frupdtask TYPE c LENGTH 30 VALUE 'UPDATE_MODE' ##NO_TEXT,
+ c_oo_synchron TYPE c VALUE 'S' ##NO_TEXT,
+ c_oo_asynchron TYPE c VALUE 'U' ##NO_TEXT,
+ c_true TYPE c VALUE 'X' ##NO_TEXT,
+ c_false TYPE c VALUE space ##NO_TEXT,
+ BEGIN OF c_variant_type,
+ dialog TYPE rglif-docutype VALUE 'D' ##NO_TEXT,
+ report TYPE rglif-docutype VALUE 'R' ##NO_TEXT,
+ variant TYPE rglif-docutype VALUE 'V' ##NO_TEXT,
+ parameters TYPE rglif-docutype VALUE 'P' ##NO_TEXT,
+ object TYPE rglif-docutype VALUE 'O' ##NO_TEXT,
+ END OF c_variant_type.
+
+ DATA:
+ mt_bcdata TYPE STANDARD TABLE OF bdcdata .
+
+ METHODS transaction_read
+ IMPORTING
+ iv_transaction TYPE tcode
+ EXPORTING
+ es_transaction TYPE tstc
+ es_gui_attr TYPE tstcc
+ RAISING
+ zcx_abapgit_exception.
+ METHODS shift_param
+ CHANGING
+ !ct_rsparam TYPE s_param
+ !cs_tstcp TYPE tstcp .
+ METHODS add_data
+ IMPORTING
+ !iv_fnam TYPE bdcdata-fnam
+ !iv_fval TYPE clike .
+ METHODS call_se93
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_oo_parameters
+ IMPORTING
+ !it_rsparam TYPE s_param
+ CHANGING
+ !cs_rsstcd TYPE rsstcd .
+ METHODS split_parameters
+ CHANGING
+ !ct_rsparam TYPE s_param
+ !cs_rsstcd TYPE rsstcd
+ !cs_tstcp TYPE tstcp
+ !cs_tstc TYPE tstc .
+ METHODS split_parameters_comp
+ IMPORTING
+ !ig_type TYPE any
+ !ig_param TYPE any
+ CHANGING
+ !cg_value TYPE any .
+ METHODS serialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_oo_transaction
+ IMPORTING
+ !iv_package TYPE devclass
+ !is_tstc TYPE tstc
+ !is_tstcc TYPE tstcc
+ !is_tstct TYPE tstct
+ !is_rsstcd TYPE rsstcd
+ RAISING
+ zcx_abapgit_exception .
+ METHODS save_authorizations
+ IMPORTING
+ iv_transaction TYPE tstc-tcode
+ it_authorizations TYPE ty_tstca
+ RAISING
+ zcx_abapgit_exception.
+ METHODS clear_functiongroup_globals.
+ METHODS is_variant_transaction IMPORTING is_tstcp TYPE tstcp
+ RETURNING VALUE(rv_variant_transaction) TYPE abap_bool.
+ENDCLASS.
+CLASS zcl_abapgit_object_ttyp DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ " Fields that are not part of dd40v
+ TYPES:
+ BEGIN OF ty_extra,
+ abap_language_version TYPE uccheck,
+ END OF ty_extra.
+
+ CONSTANTS c_longtext_id_ttyp TYPE dokil-id VALUE 'TT'.
+ENDCLASS.
+CLASS zcl_abapgit_object_type DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS: c_prefix TYPE c LENGTH 3 VALUE '%_C'.
+
+ METHODS read
+ EXPORTING ev_ddtext TYPE ddtypet-ddtext
+ et_source TYPE abaptxt255_tab
+ RAISING zcx_abapgit_exception.
+
+ METHODS create
+ IMPORTING iv_ddtext TYPE ddtypet-ddtext
+ it_source TYPE abaptxt255_tab
+ iv_devclass TYPE devclass
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_ucsa DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS:
+ BEGIN OF c_version,
+ active TYPE r3state VALUE 'A',
+ inactive TYPE r3state VALUE 'I',
+ END OF c_version .
+
+ TYPES:
+ ty_id TYPE c LENGTH 30.
+
+ METHODS:
+ get_persistence
+ IMPORTING
+ iv_id TYPE ty_id
+ RETURNING
+ VALUE(ro_persistence) TYPE REF TO object,
+
+ clear_dynamic_fields
+ CHANGING
+ cg_complete_comm_assembly TYPE any,
+
+ clear_field
+ IMPORTING
+ iv_fieldname TYPE csequence
+ CHANGING
+ cg_header TYPE any.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_udmo DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ METHODS corr_insert
+ REDEFINITION .
+ PRIVATE SECTION.
+
+ TYPES:
+ " You are reminded that the text serialisation / de-serialisation methods depend upon a common type.
+ " To make the dependency explicit, there is one common definition.
+ BEGIN OF ty_udmo_text_type.
+ TYPES sprache TYPE dm40t-sprache.
+ TYPES dmoid TYPE dm40t-dmoid.
+ TYPES langbez TYPE dm40t-langbez.
+ TYPES as4local TYPE dm40t-as4local.
+ TYPES END OF ty_udmo_text_type .
+
+ DATA mv_data_model TYPE uddmodl .
+ DATA mv_text_object TYPE doku_obj .
+ DATA mv_lxe_text_name TYPE lxeobjname .
+ DATA mv_activation_state TYPE as4local .
+ DATA ms_object_type TYPE rsdeo .
+ CONSTANTS c_transport_object_class TYPE trobjtype VALUE 'SUDM' ##NO_TEXT.
+ CONSTANTS c_lxe_text_type TYPE lxeobjtype VALUE 'IM' ##NO_TEXT.
+ CONSTANTS c_correction_object_type TYPE rsdeo-objtype VALUE 'UDMO' ##NO_TEXT.
+ CONSTANTS c_active_state TYPE as4local VALUE 'A' ##NO_TEXT.
+
+ METHODS is_name_permitted
+ RAISING
+ zcx_abapgit_exception .
+ METHODS update_tree .
+ METHODS serialize_short_texts
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_short_texts
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_long_texts
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_long_texts
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_entities
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_entities
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS access_modify
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS access_free
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_model
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_model
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_ueno DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ TYPES BEGIN OF ty_docu.
+ TYPES language TYPE dm40t-sprache.
+ TYPES header TYPE thead.
+ TYPES content TYPE xstring.
+ TYPES itf TYPE tsftext.
+ TYPES END OF ty_docu.
+
+ TYPES ty_docu_lines TYPE STANDARD TABLE OF ty_docu WITH DEFAULT KEY.
+
+ DATA mv_entity_id TYPE udentity.
+
+ CONSTANTS c_text_object_type TYPE lxeobjtype VALUE 'IM' ##NO_TEXT.
+ CONSTANTS c_active_state TYPE as4local VALUE 'A' ##NO_TEXT.
+ METHODS build_text_name
+ IMPORTING iv_id TYPE tdid
+ RETURNING VALUE(rv_result) TYPE doku_obj.
+
+ METHODS is_name_permitted
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS delete_docu_uen
+ RAISING zcx_abapgit_exception.
+
+ METHODS delete_docu_url
+ RAISING zcx_abapgit_exception.
+
+ METHODS delete_docu_usp
+ RAISING zcx_abapgit_exception.
+
+ METHODS deserialize_docu_uen
+ IMPORTING
+ io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS deserialize_docu_url
+ IMPORTING
+ io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS deserialize_docu_usp
+ IMPORTING
+ io_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS serialize_docu_uen
+ IMPORTING
+ io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS serialize_docu_url
+ IMPORTING
+ io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS serialize_docu_xxxx
+ IMPORTING iv_id TYPE tdid
+ RETURNING VALUE(rt_result) TYPE ty_docu_lines.
+
+ METHODS serialize_docu_usp
+ IMPORTING
+ io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS deserialize_docu_xxxx
+ IMPORTING
+ it_docu TYPE ty_docu_lines
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_generic
+ RETURNING
+ VALUE(ro_generic) TYPE REF TO zcl_abapgit_objects_generic
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_field_rules
+ RETURNING
+ VALUE(ro_result) TYPE REF TO zif_abapgit_field_rules.
+ENDCLASS.
+CLASS zcl_abapgit_object_vcls DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+* See include MTOBJCON:
+ CONSTANTS c_cluster_type TYPE c VALUE 'C' ##NO_TEXT.
+ CONSTANTS c_mode_insert TYPE obj_para-maint_mode VALUE 'I' ##NO_TEXT.
+
+ METHODS is_locked
+ IMPORTING
+ !iv_tabname TYPE tabname
+ !iv_argument TYPE seqg3-garg
+ RETURNING
+ VALUE(rv_is_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_view DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ "! get additional data like table authorization group
+ "! @parameter iv_name | name of the view
+ METHODS read_extras
+ IMPORTING
+ iv_name TYPE ddobjname
+ RETURNING
+ VALUE(rs_tabl_extras) TYPE zif_abapgit_object_tabl=>ty_tabl_extras
+ RAISING
+ zcx_abapgit_exception.
+
+ "! Update additional data
+ "! @parameter iv_name | name of the table
+ "! @parameter iv_transport | transport request
+ "! @parameter is_tabl_extras | additional view data
+ METHODS update_extras
+ IMPORTING
+ iv_name TYPE ddobjname
+ iv_transport TYPE trkorr
+ is_tabl_extras TYPE zif_abapgit_object_tabl=>ty_tabl_extras
+ RAISING
+ zcx_abapgit_exception.
+
+ "! Delete additional data
+ "! @parameter iv_name | name of the view
+ "! @parameter iv_transport | transport request
+ METHODS delete_extras
+ IMPORTING
+ iv_name TYPE ddobjname
+ iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS insert_transport
+ IMPORTING
+ iv_name TYPE ddobjname
+ iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+ TYPES: ty_dd26v TYPE STANDARD TABLE OF dd26v
+ WITH NON-UNIQUE DEFAULT KEY,
+ ty_dd27p TYPE STANDARD TABLE OF dd27p
+ WITH NON-UNIQUE DEFAULT KEY,
+ ty_dd28j TYPE STANDARD TABLE OF dd28j
+ WITH NON-UNIQUE DEFAULT KEY,
+ ty_dd28v TYPE STANDARD TABLE OF dd28v
+ WITH NON-UNIQUE DEFAULT KEY,
+ BEGIN OF ty_dd25_text,
+ ddlanguage TYPE dd25t-ddlanguage,
+ ddtext TYPE dd25t-ddtext,
+ END OF ty_dd25_text ,
+ ty_dd25_texts TYPE STANDARD TABLE OF ty_dd25_text.
+ CONSTANTS c_longtext_id_view TYPE dokil-id VALUE 'VW'.
+
+ METHODS:
+ read_view
+ IMPORTING
+ iv_language TYPE sy-langu
+ EXPORTING
+ ev_state TYPE ddgotstate
+ es_dd25v TYPE dd25v
+ es_dd09l TYPE dd09l
+ et_dd26v TYPE ty_dd26v
+ et_dd27p TYPE ty_dd27p
+ et_dd28j TYPE ty_dd28j
+ et_dd28v TYPE ty_dd28v
+ es_extras TYPE zif_abapgit_object_tabl=>ty_tabl_extras
+ RAISING
+ zcx_abapgit_exception,
+
+ serialize_texts
+ IMPORTING
+ ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception,
+
+ deserialize_texts
+ IMPORTING
+ ii_xml TYPE REF TO zif_abapgit_xml_input
+ is_dd25v TYPE dd25v
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_w3xx_super DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ ABSTRACT
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ TYPES:
+ ty_wwwparams_tt TYPE STANDARD TABLE OF wwwparams WITH DEFAULT KEY .
+
+ CONSTANTS:
+ BEGIN OF c_param_names,
+ version TYPE w3_name VALUE 'version',
+ fileext TYPE w3_name VALUE 'fileextension',
+ filesize TYPE w3_name VALUE 'filesize',
+ filename TYPE w3_name VALUE 'filename',
+ mimetype TYPE w3_name VALUE 'mimetype',
+ END OF c_param_names .
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ TYPES ty_bdcdata TYPE STANDARD TABLE OF bdcdata
+ WITH NON-UNIQUE DEFAULT KEY.
+
+ METHODS change_bdc_jump_data ABSTRACT
+ CHANGING
+ ct_bdcdata TYPE ty_bdcdata.
+
+ PRIVATE SECTION.
+
+ DATA ms_key TYPE wwwdatatab.
+
+ METHODS get_ext
+ IMPORTING it_params TYPE ty_wwwparams_tt
+ RETURNING VALUE(rv_ext) TYPE string
+ RAISING zcx_abapgit_exception.
+
+ METHODS normalize_params
+ IMPORTING iv_size TYPE i
+ CHANGING ct_params TYPE ty_wwwparams_tt " Param table to patch
+ RAISING zcx_abapgit_exception.
+
+ METHODS strip_params
+ CHANGING ct_params TYPE ty_wwwparams_tt
+ RAISING zcx_abapgit_exception.
+
+ METHODS find_param
+ IMPORTING it_params TYPE ty_wwwparams_tt
+ iv_name TYPE w3_name
+ RETURNING VALUE(rv_value) TYPE string
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_w3ht DEFINITION INHERITING FROM zcl_abapgit_object_w3xx_super FINAL.
+
+ PROTECTED SECTION.
+ METHODS: change_bdc_jump_data REDEFINITION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_w3mi DEFINITION INHERITING FROM zcl_abapgit_object_w3xx_super FINAL.
+
+ PROTECTED SECTION.
+ METHODS: change_bdc_jump_data REDEFINITION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_wapa DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_page,
+ attributes TYPE o2pagattr,
+ event_handlers TYPE o2pagevh_tabletype,
+ parameters TYPE o2pagpar_tabletype,
+ types TYPE rswsourcet,
+ END OF ty_page.
+
+ TYPES: ty_pages_tt TYPE STANDARD TABLE OF ty_page WITH DEFAULT KEY.
+
+ CONSTANTS: c_active TYPE so2_version VALUE 'A'.
+
+ METHODS:
+ get_page_content
+ IMPORTING io_page TYPE REF TO cl_o2_api_pages
+ RETURNING VALUE(rv_content) TYPE xstring
+ RAISING zcx_abapgit_exception,
+ to_page_content
+ IMPORTING iv_content TYPE xstring
+ RETURNING VALUE(rt_content) TYPE o2pageline_table
+ RAISING zcx_abapgit_exception,
+ read_page
+ IMPORTING is_page TYPE o2pagattr
+ iv_no_files_add TYPE abap_bool OPTIONAL
+ RETURNING VALUE(rs_page) TYPE ty_page
+ RAISING zcx_abapgit_exception,
+ create_new_application
+ IMPORTING is_attributes TYPE o2applattr
+ it_nodes TYPE o2applnode_table
+ it_navgraph TYPE o2applgrap_table
+ RETURNING VALUE(ro_bsp) TYPE REF TO cl_o2_api_application
+ RAISING zcx_abapgit_exception,
+ create_new_page
+ IMPORTING
+ is_page_attributes TYPE o2pagattr
+ RETURNING
+ VALUE(ro_page) TYPE REF TO cl_o2_api_pages
+ RAISING
+ zcx_abapgit_exception,
+ delete_superfluous_pages
+ IMPORTING
+ it_local_pages TYPE o2pagelist
+ it_remote_pages TYPE ty_pages_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_wdca DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS read
+ EXPORTING
+ !es_outline TYPE wdy_cfg_outline_data
+ !et_data TYPE wdy_cfg_persist_data_appl_tab
+ RAISING
+ zcx_abapgit_exception .
+ METHODS save
+ IMPORTING
+ !is_outline TYPE wdy_cfg_outline_data
+ !it_data TYPE wdy_cfg_persist_data_appl_tab
+ !iv_package TYPE devclass
+ !iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete
+ IMPORTING
+ !iv_package TYPE devclass
+ !iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ METHODS check
+ IMPORTING
+ !it_messages TYPE cts_messages
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_wdcc DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ METHODS constructor
+ IMPORTING
+ is_item TYPE zif_abapgit_definitions=>ty_item
+ iv_language TYPE spras
+ io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_type_not_supported.
+ PROTECTED SECTION.
+ METHODS after_import
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_object_wdya DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS c_longtext_id_wdya TYPE dokil-id VALUE 'WA'.
+
+ 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_wdyn DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_longtext_id_wc TYPE dokil-id VALUE 'WC' ##NO_TEXT.
+ CONSTANTS c_longtext_id_wd TYPE dokil-id VALUE 'WD' ##NO_TEXT.
+ CONSTANTS c_longtext_name_wc TYPE string VALUE 'LONGTEXTS_WC' ##NO_TEXT.
+
+ DATA:
+ mt_components TYPE TABLE OF wdy_ctlr_compo_vrs,
+ mt_sources TYPE TABLE OF wdy_ctlr_compo_source_vrs.
+
+ METHODS:
+ get_limu_objects
+ RETURNING VALUE(rt_objects) TYPE wdy_md_transport_keys,
+ read
+ RETURNING VALUE(rs_component) TYPE wdy_component_metadata
+ RAISING zcx_abapgit_exception,
+ read_controller
+ IMPORTING is_key TYPE wdy_md_controller_key
+ RETURNING VALUE(rs_controller) TYPE wdy_md_controller_meta_data
+ RAISING zcx_abapgit_exception,
+ read_definition
+ IMPORTING is_key TYPE wdy_md_component_key
+ RETURNING VALUE(rs_definition) TYPE wdy_md_component_meta_data
+ RAISING zcx_abapgit_exception,
+ read_view
+ IMPORTING is_key TYPE wdy_md_view_key
+ RETURNING VALUE(rs_view) TYPE wdy_md_view_meta_data
+ RAISING zcx_abapgit_exception,
+ recover_controller
+ IMPORTING is_controller TYPE wdy_md_controller_meta_data
+ RAISING zcx_abapgit_exception,
+ recover_definition
+ IMPORTING is_definition TYPE wdy_md_component_meta_data
+ iv_package TYPE devclass
+ RAISING zcx_abapgit_exception,
+ recover_view
+ IMPORTING is_view TYPE wdy_md_view_meta_data
+ RAISING zcx_abapgit_exception,
+ unlock_definition
+ IMPORTING is_component_key TYPE wdy_md_component_key,
+ unlock_controller
+ IMPORTING is_controller_key TYPE wdy_md_controller_key,
+ unlock_view
+ IMPORTING is_view_key TYPE wdy_md_view_key,
+ delta_controller
+ IMPORTING is_controller TYPE wdy_md_controller_meta_data
+ RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object
+ RAISING zcx_abapgit_exception,
+ delta_definition
+ IMPORTING is_definition TYPE wdy_md_component_meta_data
+ VALUE(iv_package) TYPE devclass
+ RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object
+ RAISING zcx_abapgit_exception,
+ delta_view
+ IMPORTING is_view TYPE wdy_md_view_meta_data
+ RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object
+ RAISING zcx_abapgit_exception,
+ deserialize_sources
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING zcx_abapgit_exception,
+ serialize_sources
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING zcx_abapgit_exception,
+ add_fm_param_exporting
+ IMPORTING iv_name TYPE string
+ ig_value TYPE any
+ CHANGING ct_param TYPE abap_func_parmbind_tab,
+ add_fm_param_tables
+ IMPORTING iv_name TYPE string
+ CHANGING ct_value TYPE ANY TABLE
+ ct_param TYPE abap_func_parmbind_tab,
+ add_fm_exception
+ IMPORTING iv_name TYPE string
+ iv_value TYPE i
+ CHANGING ct_exception TYPE abap_func_excpbind_tab,
+ add_with_inactive_parts
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_webi DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES: BEGIN OF ty_webi,
+ veptext TYPE veptext,
+ pvepheader TYPE STANDARD TABLE OF vepheader WITH DEFAULT KEY,
+ pvepfunction TYPE STANDARD TABLE OF vepfunction WITH DEFAULT KEY,
+ pvepfault TYPE STANDARD TABLE OF vepfault WITH DEFAULT KEY,
+ pvepparameter TYPE STANDARD TABLE OF vepparameter WITH DEFAULT KEY,
+ pveptype TYPE STANDARD TABLE OF veptype WITH DEFAULT KEY,
+ pvepelemtype TYPE STANDARD TABLE OF vepelemtype WITH DEFAULT KEY,
+ pveptabletype TYPE STANDARD TABLE OF veptabletype WITH DEFAULT KEY,
+ pvepstrutype TYPE STANDARD TABLE OF vepstrutype WITH DEFAULT KEY,
+ pveptypesoapext TYPE STANDARD TABLE OF veptypesoapext WITH DEFAULT KEY,
+ pvepeletypsoap TYPE STANDARD TABLE OF vepeletypsoap WITH DEFAULT KEY,
+ pveptabtypsoap TYPE STANDARD TABLE OF veptabtypsoap WITH DEFAULT KEY,
+ pvepfuncsoapext TYPE STANDARD TABLE OF vepfuncsoapext WITH DEFAULT KEY,
+ pvepfieldref TYPE STANDARD TABLE OF vepfieldref WITH DEFAULT KEY,
+ pvependpoint TYPE STANDARD TABLE OF vependpoint WITH DEFAULT KEY,
+ pvepvisoapext TYPE STANDARD TABLE OF vepvisoapext WITH DEFAULT KEY,
+ pvepparasoapext TYPE STANDARD TABLE OF vepparasoapext WITH DEFAULT KEY,
+ pwsheader TYPE STANDARD TABLE OF wsheader WITH DEFAULT KEY,
+ pwssoapprop TYPE STANDARD TABLE OF wssoapprop WITH DEFAULT KEY,
+ END OF ty_webi.
+
+ DATA: mi_vi TYPE REF TO if_ws_md_vif.
+
+ METHODS:
+ handle_endpoint
+ IMPORTING is_webi TYPE ty_webi
+ RAISING zcx_abapgit_exception
+ cx_ws_md_exception,
+ handle_types
+ IMPORTING is_webi TYPE ty_webi
+ RAISING zcx_abapgit_exception
+ cx_ws_md_exception,
+ handle_soap
+ IMPORTING is_webi TYPE ty_webi
+ RAISING zcx_abapgit_exception
+ cx_ws_md_exception,
+ handle_function
+ IMPORTING is_webi TYPE ty_webi
+ RAISING zcx_abapgit_exception
+ cx_ws_md_exception.
+ METHODS handle_single_parameter
+ IMPORTING
+ iv_parameter_type TYPE vepparamtype
+ iv_name TYPE vepparameter-vepparam
+ ii_function TYPE REF TO if_ws_md_vif_func
+ RETURNING
+ VALUE(ri_parameter) TYPE REF TO if_ws_md_vif_param
+ RAISING
+ zcx_abapgit_exception
+ cx_ws_md_exception.
+ METHODS sort
+ CHANGING
+ cs_webi TYPE ty_webi.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_xinx DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_extension_index,
+ dd12v TYPE dd12v,
+ t_dd17v TYPE STANDARD TABLE OF dd17v
+ WITH NON-UNIQUE DEFAULT KEY,
+ END OF ty_extension_index.
+
+ CONSTANTS:
+ c_objtype_extension_index TYPE trobjtype VALUE 'XINX'.
+
+ CONSTANTS c_longtext_id_xinx TYPE dokil-id VALUE 'XI'.
+
+ DATA:
+ mv_name TYPE ddobjname,
+ mv_id TYPE ddobjectid.
+
+ METHODS:
+ xinx_delete_docu
+ IMPORTING
+ iv_objname TYPE ddobjname
+ iv_id TYPE ddobjectid.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_xslt DEFINITION INHERITING FROM zcl_abapgit_objects_super FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_extra,
+ abap_language_version TYPE uccheck,
+ END OF ty_extra.
+
+ METHODS:
+ get
+ RETURNING VALUE(ro_xslt) TYPE REF TO cl_o2_api_xsltdesc
+ RAISING zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_objects_bridge DEFINITION FINAL CREATE PUBLIC INHERITING FROM zcl_abapgit_objects_super.
+
+ PUBLIC SECTION.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ cx_sy_create_object_error.
+
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mo_plugin TYPE REF TO object.
+
+ CLASS-METHODS initialize.
+
+ " Metadata flags (late_deser, delete_tadir, and ddic) are not required by abapGit anymore
+ " We keep them to stay compatible with old bridge implementation
+ TYPES:
+ BEGIN OF ty_metadata,
+ class TYPE string,
+ version TYPE string,
+ late_deser TYPE abap_bool,
+ delete_tadir TYPE abap_bool,
+ ddic TYPE abap_bool,
+ END OF ty_metadata .
+
+ TYPES: BEGIN OF ty_s_objtype_map,
+ obj_typ TYPE tadir-object,
+ plugin_class TYPE seoclsname,
+ END OF ty_s_objtype_map,
+ ty_t_objtype_map TYPE SORTED TABLE OF ty_s_objtype_map WITH UNIQUE KEY obj_typ.
+
+ CLASS-DATA gv_init TYPE abap_bool.
+ CLASS-DATA gt_objtype_map TYPE ty_t_objtype_map.
+
+ENDCLASS.
+CLASS zcl_abapgit_objects_program DEFINITION
+ INHERITING FROM zcl_abapgit_objects_super
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_cua,
+ adm TYPE rsmpe_adm,
+ sta TYPE STANDARD TABLE OF rsmpe_stat WITH DEFAULT KEY,
+ fun TYPE STANDARD TABLE OF rsmpe_funt WITH DEFAULT KEY,
+ men TYPE STANDARD TABLE OF rsmpe_men WITH DEFAULT KEY,
+ mtx TYPE STANDARD TABLE OF rsmpe_mnlt WITH DEFAULT KEY,
+ act TYPE STANDARD TABLE OF rsmpe_act WITH DEFAULT KEY,
+ but TYPE STANDARD TABLE OF rsmpe_but WITH DEFAULT KEY,
+ pfk TYPE STANDARD TABLE OF rsmpe_pfk WITH DEFAULT KEY,
+ set TYPE STANDARD TABLE OF rsmpe_staf WITH DEFAULT KEY,
+ doc TYPE STANDARD TABLE OF rsmpe_atrt WITH DEFAULT KEY,
+ tit TYPE STANDARD TABLE OF rsmpe_titt WITH DEFAULT KEY,
+ biv TYPE STANDARD TABLE OF rsmpe_buts WITH DEFAULT KEY,
+ END OF ty_cua.
+
+ METHODS serialize_program
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output OPTIONAL
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !io_files TYPE REF TO zcl_abapgit_objects_files
+ !iv_program TYPE syrepid OPTIONAL
+ !iv_extra TYPE clike OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+ METHODS deserialize_program
+ IMPORTING
+ !is_progdir TYPE zif_abapgit_sap_report=>ty_progdir
+ !it_source TYPE abaptxt255_tab
+ !it_tpool TYPE textpool_table
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+
+ TYPES:
+ ty_spaces_tt TYPE STANDARD TABLE OF i WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_dynpro,
+ header TYPE rpy_dyhead,
+ containers TYPE dycatt_tab,
+ fields TYPE dyfatc_tab,
+ flow_logic TYPE swydyflow,
+ spaces TYPE ty_spaces_tt,
+ nat_header TYPE d020s,
+ nat_fields TYPE STANDARD TABLE OF d021s WITH DEFAULT KEY,
+ nat_texts TYPE STANDARD TABLE OF d021t WITH DEFAULT KEY,
+ END OF ty_dynpro .
+ TYPES:
+ ty_dynpro_tt TYPE STANDARD TABLE OF ty_dynpro WITH DEFAULT KEY .
+
+ METHODS strip_generation_comments
+ CHANGING
+ ct_source TYPE STANDARD TABLE. " tab of string or charX
+ METHODS serialize_dynpros
+ IMPORTING
+ !iv_program_name TYPE syrepid
+ RETURNING
+ VALUE(rt_dynpro) TYPE ty_dynpro_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_cua
+ IMPORTING
+ !iv_program_name TYPE syrepid
+ RETURNING
+ VALUE(rs_cua) TYPE ty_cua
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_dynpros
+ IMPORTING
+ !it_dynpros TYPE ty_dynpro_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_textpool
+ IMPORTING
+ !iv_program TYPE syrepid
+ !it_tpool TYPE textpool_table
+ !iv_language TYPE sy-langu OPTIONAL
+ !iv_is_include TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_cua
+ IMPORTING
+ !iv_program_name TYPE syrepid
+ !is_cua TYPE ty_cua
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_any_dynpro_locked
+ IMPORTING
+ !iv_program TYPE syrepid
+ RETURNING
+ VALUE(rv_is_any_dynpro_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_cua_locked
+ IMPORTING
+ !iv_program TYPE syrepid
+ RETURNING
+ VALUE(rv_is_cua_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_text_locked
+ IMPORTING
+ !iv_program TYPE syrepid
+ RETURNING
+ VALUE(rv_is_text_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS add_tpool
+ IMPORTING
+ !it_tpool TYPE textpool_table
+ RETURNING
+ VALUE(rt_tpool) TYPE zif_abapgit_lang_definitions=>ty_tpool_tt.
+ CLASS-METHODS read_tpool
+ IMPORTING
+ !it_tpool TYPE zif_abapgit_lang_definitions=>ty_tpool_tt
+ RETURNING
+ VALUE(rt_tpool) TYPE textpool_table.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_state,
+ active TYPE r3state VALUE 'A',
+ inactive TYPE r3state VALUE 'I',
+ END OF c_state.
+
+ CONSTANTS c_native_dynpro TYPE c LENGTH 2 VALUE 'IN'.
+
+ METHODS:
+ uncondense_flow
+ IMPORTING it_flow TYPE swydyflow
+ it_spaces TYPE ty_spaces_tt
+ RETURNING VALUE(rt_flow) TYPE swydyflow.
+
+ CLASS-METHODS auto_correct_cua_adm
+ IMPORTING
+ is_cua TYPE ty_cua
+ CHANGING
+ cs_adm TYPE rsmpe_adm.
+
+ METHODS get_program_title
+ IMPORTING
+ !it_tpool TYPE textpool_table
+ RETURNING
+ VALUE(rv_title) TYPE repti .
+ METHODS insert_program
+ IMPORTING
+ !is_progdir TYPE zif_abapgit_sap_report=>ty_progdir
+ !it_source TYPE abaptxt255_tab
+ !iv_title TYPE repti
+ !iv_package TYPE devclass
+ !iv_state TYPE progdir-state DEFAULT c_state-inactive
+ RAISING
+ zcx_abapgit_exception .
+ METHODS update_program
+ IMPORTING
+ !is_progdir TYPE zif_abapgit_sap_report=>ty_progdir
+ !it_source TYPE abaptxt255_tab
+ !iv_title TYPE repti
+ !iv_state TYPE progdir-state DEFAULT c_state-inactive
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_exit_include
+ IMPORTING
+ !iv_program TYPE syrepid
+ RETURNING
+ VALUE(rv_is_exit_include) TYPE abap_bool.
+ METHODS deserialize_exit_include
+ IMPORTING
+ !is_progdir TYPE zif_abapgit_sap_report=>ty_progdir
+ !it_source TYPE abaptxt255_tab
+ !it_tpool TYPE textpool_table
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_object_clas DEFINITION
+ INHERITING FROM zcl_abapgit_objects_program
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ DATA: mi_object_oriented_object_fct TYPE REF TO zif_abapgit_oo_object_fnc,
+ mv_skip_testclass TYPE abap_bool,
+ mv_classpool_name TYPE progname.
+ METHODS:
+ deserialize_abap
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
+ iv_package TYPE devclass
+ RAISING zcx_abapgit_exception,
+ deserialize_descr
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING zcx_abapgit_exception,
+ deserialize_docu
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING zcx_abapgit_exception,
+ deserialize_tpool
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING zcx_abapgit_exception,
+ deserialize_tpool_i18n
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING zcx_abapgit_exception,
+ deserialize_sotr
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
+ iv_package TYPE devclass
+ RAISING zcx_abapgit_exception,
+ deserialize_exceptions
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING zcx_abapgit_exception,
+ serialize_xml
+ IMPORTING ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING zcx_abapgit_exception,
+ serialize_attr
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !iv_clsname TYPE seoclsname
+ RAISING
+ zcx_abapgit_exception,
+ serialize_descr_class
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !iv_clsname TYPE seoclsname
+ RAISING
+ zcx_abapgit_exception,
+ serialize_descr_compo
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !iv_clsname TYPE seoclsname
+ RAISING
+ zcx_abapgit_exception,
+ serialize_descr_subco
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !iv_clsname TYPE seoclsname
+ RAISING
+ zcx_abapgit_exception,
+ serialize_docu
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !it_langu_additional TYPE zif_abapgit_lang_definitions=>ty_langus OPTIONAL
+ !iv_clsname TYPE seoclsname
+ RAISING
+ zcx_abapgit_exception,
+ serialize_tpool
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !iv_clsname TYPE seoclsname
+ RETURNING
+ VALUE(rt_tpool) TYPE textpool_table
+ RAISING
+ zcx_abapgit_exception,
+ serialize_tpool_i18n
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ !it_langu_additional TYPE zif_abapgit_lang_definitions=>ty_langus OPTIONAL
+ !iv_clsname TYPE seoclsname
+ !it_tpool_main TYPE textpool_table
+ RAISING
+ zcx_abapgit_exception,
+ serialize_sotr
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception,
+ source_apack_replacement
+ CHANGING
+ !ct_source TYPE seop_source_string
+ RAISING
+ zcx_abapgit_exception,
+ repo_apack_replacement
+ CHANGING
+ !ct_source TYPE seop_source_string
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_longtext_name,
+ attributes TYPE string VALUE 'LONGTEXTS_CA',
+ methods TYPE string VALUE 'LONGTEXTS_CO',
+ events TYPE string VALUE 'LONGTEXTS_CE',
+ types TYPE string VALUE 'LONGTEXTS_CT',
+ END OF c_longtext_name.
+ CONSTANTS:
+ BEGIN OF c_longtext_id,
+ class TYPE dokil-id VALUE 'CL',
+ attributes TYPE dokil-id VALUE 'CA',
+ methods TYPE dokil-id VALUE 'CO',
+ events TYPE dokil-id VALUE 'CE',
+ types TYPE dokil-id VALUE 'CT',
+ END OF c_longtext_id.
+
+ METHODS deserialize_pre_ddic
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS is_class_locked
+ RETURNING
+ VALUE(rv_is_class_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS interface_replacement
+ IMPORTING
+ !iv_from_interface TYPE seoclsname
+ !iv_to_interface TYPE seoclsname
+ CHANGING
+ !ct_source TYPE seop_source_string.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_fugr DEFINITION
+ INHERITING FROM zcl_abapgit_objects_program
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_object .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ c_longtext_id_prog TYPE dokil-id VALUE 'RE',
+ c_longtext_id_func TYPE dokil-id VALUE 'FU',
+ c_longtext_id_func_exc TYPE dokil-id VALUE 'FX'.
+
+ TYPES:
+ ty_rs38l_incl_tt TYPE STANDARD TABLE OF rs38l_incl WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_function,
+ funcname TYPE rs38l_fnam,
+ global_flag TYPE rs38l-global,
+ remote_call TYPE rs38l-remote,
+ update_task TYPE rs38l-utask,
+ short_text TYPE tftit-stext,
+ remote_basxml TYPE rs38l-basxml_enabled,
+ import TYPE STANDARD TABLE OF rsimp WITH DEFAULT KEY,
+ changing TYPE STANDARD TABLE OF rscha WITH DEFAULT KEY,
+ export TYPE STANDARD TABLE OF rsexp WITH DEFAULT KEY,
+ tables TYPE STANDARD TABLE OF rstbl WITH DEFAULT KEY,
+ exception TYPE STANDARD TABLE OF rsexc WITH DEFAULT KEY,
+ documentation TYPE STANDARD TABLE OF rsfdo WITH DEFAULT KEY,
+ exception_classes TYPE abap_bool,
+ END OF ty_function .
+ TYPES:
+ ty_function_tt TYPE STANDARD TABLE OF ty_function WITH DEFAULT KEY .
+ TYPES:
+ ty_sobj_name_tt TYPE STANDARD TABLE OF sobj_name WITH DEFAULT KEY .
+
+ DATA mt_includes_cache TYPE ty_sobj_name_tt .
+ DATA mt_includes_all TYPE ty_sobj_name_tt .
+
+ METHODS check_rfc_parameters
+ IMPORTING
+ !is_function TYPE ty_function
+ RAISING
+ zcx_abapgit_exception .
+ METHODS update_where_used
+ IMPORTING
+ !it_includes TYPE ty_sobj_name_tt .
+ METHODS main_name
+ RETURNING
+ VALUE(rv_program) TYPE program
+ RAISING
+ zcx_abapgit_exception .
+ METHODS functions
+ RETURNING
+ VALUE(rt_functab) TYPE ty_rs38l_incl_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS includes
+ RETURNING
+ VALUE(rt_includes) TYPE ty_sobj_name_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_functions
+ RETURNING
+ VALUE(rt_functions) TYPE ty_function_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_functions
+ IMPORTING
+ !it_functions TYPE ty_function_tt
+ !ii_log TYPE REF TO zif_abapgit_log
+ !iv_version TYPE uccheck
+ !iv_package TYPE devclass
+ !iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_function_docs
+ IMPORTING
+ !iv_prog_name TYPE syrepid
+ !it_functions TYPE ty_function_tt
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_function_docs
+ IMPORTING
+ !iv_prog_name TYPE syrepid
+ !it_functions TYPE ty_function_tt
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_xml
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_xml
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ !iv_version TYPE uccheck
+ !iv_package TYPE devclass
+ !iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_includes
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_includes
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ !iv_package TYPE devclass
+ !ii_log TYPE REF TO zif_abapgit_log
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_function_group_locked
+ RETURNING
+ VALUE(rv_is_functions_group_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_any_include_locked
+ RETURNING
+ VALUE(rv_is_any_include_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_any_function_module_locked
+ RETURNING
+ VALUE(rv_any_function_module_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_abap_version
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ RETURNING
+ VALUE(rv_abap_version) TYPE progdir-uccheck
+ RAISING
+ zcx_abapgit_exception .
+ METHODS update_func_group_short_text
+ IMPORTING
+ !iv_group TYPE rs38l-area
+ !iv_short_text TYPE tftit-stext .
+ METHODS serialize_texts
+ IMPORTING
+ !iv_prog_name TYPE syrepid
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_texts
+ IMPORTING
+ !iv_prog_name TYPE syrepid
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_part_of_other_fugr
+ IMPORTING
+ !iv_include TYPE sobj_name
+ RETURNING
+ VALUE(rv_belongs_to_other_fugr) TYPE abap_bool.
+ENDCLASS.
+CLASS zcl_abapgit_object_fugs DEFINITION
+ INHERITING FROM zcl_abapgit_object_fugr
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_object_intf DEFINITION FINAL INHERITING FROM zcl_abapgit_objects_program.
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+
+ TYPES:
+ BEGIN OF ty_docu,
+ lines TYPE tlinetab,
+ i18n_lines TYPE zif_abapgit_lang_definitions=>ty_i18n_lines,
+ END OF ty_docu.
+
+ TYPES:
+ BEGIN OF ty_intf,
+ vseointerf TYPE vseointerf,
+ docu TYPE ty_docu,
+ description_int TYPE zif_abapgit_oo_object_fnc=>ty_seoclasstx_tt,
+ description TYPE zif_abapgit_oo_object_fnc=>ty_seocompotx_tt,
+ description_sub TYPE zif_abapgit_oo_object_fnc=>ty_seosubcotx_tt,
+ END OF ty_intf.
+
+ METHODS constructor
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_language TYPE spras
+ !io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
+ !io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ METHODS deserialize_proxy
+ IMPORTING
+ iv_transport TYPE trkorr
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_docu
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ !is_docu TYPE ty_docu
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_docu
+ IMPORTING
+ !it_langu_additional TYPE zif_abapgit_lang_definitions=>ty_langus OPTIONAL
+ !iv_clsname TYPE seoclsname
+ RETURNING VALUE(rs_docu) TYPE ty_docu
+ RAISING
+ zcx_abapgit_exception.
+ METHODS serialize_descr_class
+ IMPORTING
+ !iv_clsname TYPE seoclsname
+ RETURNING
+ VALUE(rs_description) TYPE ty_intf-description_int
+ RAISING
+ zcx_abapgit_exception.
+ METHODS serialize_descr_compo
+ IMPORTING
+ !iv_clsname TYPE seoclsname
+ RETURNING
+ VALUE(rs_description) TYPE ty_intf-description
+ RAISING
+ zcx_abapgit_exception.
+ METHODS serialize_descr_subco
+ IMPORTING
+ !iv_clsname TYPE seoclsname
+ RETURNING
+ VALUE(rs_description) TYPE ty_intf-description_sub
+ RAISING
+ zcx_abapgit_exception.
+ METHODS serialize_xml
+ IMPORTING
+ !io_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_longtext_name,
+ attributes TYPE string VALUE 'LONGTEXTS_IA',
+ methods TYPE string VALUE 'LONGTEXTS_IO',
+ events TYPE string VALUE 'LONGTEXTS_IE',
+ END OF c_longtext_name.
+
+ CONSTANTS:
+ BEGIN OF c_longtext_id,
+ interface TYPE dokil-id VALUE 'IF',
+ attributes TYPE dokil-id VALUE 'IA',
+ methods TYPE dokil-id VALUE 'IO',
+ events TYPE dokil-id VALUE 'IE',
+ END OF c_longtext_id.
+
+ DATA mv_aff_enabled TYPE abap_bool.
+ DATA mi_object_oriented_object_fct TYPE REF TO zif_abapgit_oo_object_fnc .
+
+ METHODS deserialize_pre_ddic
+ IMPORTING
+ ii_xml TYPE REF TO zif_abapgit_xml_input
+ iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS deserialize_descr_class
+ IMPORTING
+ it_description TYPE zif_abapgit_oo_object_fnc=>ty_seoclasstx_tt OPTIONAL.
+ METHODS deserialize_descr_compo
+ IMPORTING
+ it_description TYPE zif_abapgit_oo_object_fnc=>ty_seocompotx_tt OPTIONAL.
+ METHODS deserialize_descr_subco
+ IMPORTING
+ it_description TYPE zif_abapgit_oo_object_fnc=>ty_seosubcotx_tt OPTIONAL.
+ METHODS read_xml
+ IMPORTING
+ ii_xml TYPE REF TO zif_abapgit_xml_input
+ RETURNING VALUE(rs_intf) TYPE ty_intf
+ RAISING
+ zcx_abapgit_exception.
+ METHODS read_json
+ RETURNING VALUE(rs_intf) TYPE ty_intf
+ RAISING
+ zcx_abapgit_exception.
+ METHODS extract_languages_for_transl
+ IMPORTING is_intf TYPE ty_intf
+ RETURNING VALUE(rs_result) TYPE zif_abapgit_definitions=>ty_languages.
+ENDCLASS.
+CLASS zcl_abapgit_object_prog DEFINITION INHERITING FROM zcl_abapgit_objects_program FINAL.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_longtext_id_prog TYPE dokil-id VALUE 'RE' ##NO_TEXT.
+
+ METHODS deserialize_with_ext
+ IMPORTING
+ !is_progdir TYPE zif_abapgit_sap_report=>ty_progdir
+ !it_source TYPE abaptxt255_tab
+ !iv_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception .
+ METHODS serialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_output
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_texts
+ IMPORTING
+ !ii_xml TYPE REF TO zif_abapgit_xml_input
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_program_locked
+ RETURNING
+ VALUE(rv_is_program_locked) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_migrations DEFINITION FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ CLASS-METHODS run
+ RAISING
+ zcx_abapgit_exception
+ zcx_abapgit_not_found.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-METHODS migrate_offline_repos.
+ENDCLASS.
+CLASS zcl_abapgit_persist_background DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_persist_factory.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_persist_background.
+
+ METHODS constructor.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mo_db TYPE REF TO zcl_abapgit_persistence_db .
+
+ METHODS from_xml
+ IMPORTING
+ !iv_string TYPE string
+ RETURNING
+ VALUE(rs_xml) TYPE zif_abapgit_persist_background=>ty_xml
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS to_xml
+ IMPORTING
+ !is_background TYPE zif_abapgit_persist_background=>ty_background
+ RETURNING
+ VALUE(rv_string) TYPE string .
+ENDCLASS.
+CLASS zcl_abapgit_persist_factory DEFINITION
+ CREATE PRIVATE
+ .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get_repo
+ RETURNING
+ VALUE(ri_repo) TYPE REF TO zif_abapgit_persist_repo .
+ CLASS-METHODS get_repo_cs
+ RETURNING
+ VALUE(ri_repo_cs) TYPE REF TO zif_abapgit_persist_repo_cs .
+ CLASS-METHODS get_settings
+ RETURNING
+ VALUE(ri_settings) TYPE REF TO zif_abapgit_persist_settings .
+ CLASS-METHODS get_background
+ RETURNING
+ VALUE(ri_background) TYPE REF TO zif_abapgit_persist_background.
+ CLASS-METHODS get_packages
+ RETURNING
+ VALUE(ri_packages) TYPE REF TO zif_abapgit_persist_packages.
+ CLASS-METHODS get_user
+ IMPORTING
+ !iv_user TYPE sy-uname DEFAULT sy-uname
+ RETURNING
+ VALUE(ri_user) TYPE REF TO zif_abapgit_persist_user.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gi_repo TYPE REF TO zif_abapgit_persist_repo .
+ CLASS-DATA gi_repo_cs TYPE REF TO zif_abapgit_persist_repo_cs .
+ CLASS-DATA gi_settings TYPE REF TO zif_abapgit_persist_settings .
+ CLASS-DATA gi_background TYPE REF TO zif_abapgit_persist_background.
+ CLASS-DATA gi_packages TYPE REF TO zif_abapgit_persist_packages.
+ CLASS-DATA gi_current_user TYPE REF TO zif_abapgit_persist_user.
+ENDCLASS.
+CLASS zcl_abapgit_persist_migrate DEFINITION CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ CLASS-METHODS: run RAISING zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS c_text TYPE string VALUE 'Generated by abapGit' ##NO_TEXT.
+
+ CLASS-METHODS table_create
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS table_exists
+ RETURNING
+ VALUE(rv_exists) TYPE abap_bool.
+ CLASS-METHODS lock_create
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS lock_exists
+ RETURNING
+ VALUE(rv_exists) TYPE abap_bool.
+ CLASS-METHODS gui_status_create
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS gui_status_exists
+ RETURNING
+ VALUE(rv_exists) TYPE abap_bool.
+
+ENDCLASS.
+CLASS zcl_abapgit_persist_packages DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_persist_factory.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_persist_packages.
+
+ METHODS init.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mt_packages TYPE zif_abapgit_persist_packages=>ty_packages.
+
+ METHODS from_xml
+ IMPORTING
+ iv_xml TYPE string
+ RETURNING
+ VALUE(rt_packages) TYPE zif_abapgit_persist_packages=>ty_packages
+ RAISING
+ zcx_abapgit_exception.
+ METHODS to_xml
+ IMPORTING
+ it_packages TYPE zif_abapgit_persist_packages=>ty_packages
+ RETURNING
+ VALUE(rv_xml) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_persist_settings DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_persist_factory .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_persist_settings .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mo_settings TYPE REF TO zcl_abapgit_settings .
+
+ENDCLASS.
+CLASS zcl_abapgit_persistence_db DEFINITION
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+ CONSTANTS c_tabname TYPE c LENGTH 30 VALUE 'ZABAPGIT' ##NO_TEXT.
+ CONSTANTS c_lock TYPE c LENGTH 30 VALUE 'EZABAPGIT' ##NO_TEXT.
+
+ CONSTANTS:
+ c_type_settings TYPE zif_abapgit_persistence=>ty_type VALUE 'SETTINGS' ##NO_TEXT,
+ c_type_repo TYPE zif_abapgit_persistence=>ty_type VALUE 'REPO' ##NO_TEXT,
+ c_type_repo_csum TYPE zif_abapgit_persistence=>ty_type VALUE 'REPO_CS' ##NO_TEXT,
+ c_type_background TYPE zif_abapgit_persistence=>ty_type VALUE 'BACKGROUND' ##NO_TEXT,
+ c_type_packages TYPE zif_abapgit_persistence=>ty_type VALUE 'PACKAGES' ##NO_TEXT,
+ c_type_user TYPE zif_abapgit_persistence=>ty_type VALUE 'USER' ##NO_TEXT.
+
+ CLASS-METHODS get_instance
+ RETURNING
+ VALUE(ro_db) TYPE REF TO zcl_abapgit_persistence_db .
+ METHODS add
+ IMPORTING
+ !iv_type TYPE zif_abapgit_persistence=>ty_type
+ !iv_value TYPE zif_abapgit_persistence=>ty_content-value
+ !iv_data TYPE zif_abapgit_persistence=>ty_content-data_str
+ RAISING
+ zcx_abapgit_exception .
+ METHODS delete
+ IMPORTING
+ !iv_type TYPE zif_abapgit_persistence=>ty_type
+ !iv_value TYPE zif_abapgit_persistence=>ty_content-value
+ RAISING
+ zcx_abapgit_exception .
+ METHODS list
+ RETURNING
+ VALUE(rt_content) TYPE zif_abapgit_persistence=>ty_contents .
+ METHODS list_by_type
+ IMPORTING
+ !iv_type TYPE zif_abapgit_persistence=>ty_type
+ RETURNING
+ VALUE(rt_content) TYPE zif_abapgit_persistence=>ty_contents .
+ METHODS list_by_keys
+ IMPORTING it_keys TYPE zif_abapgit_persistence=>ty_repo_keys
+ iv_type TYPE zif_abapgit_persistence=>ty_type
+ RETURNING VALUE(rt_contents) TYPE zif_abapgit_persistence=>ty_contents.
+ METHODS lock
+ IMPORTING
+ !iv_mode TYPE enqmode DEFAULT 'E'
+ !iv_type TYPE zif_abapgit_persistence=>ty_type
+ !iv_value TYPE zif_abapgit_persistence=>ty_content-value
+ RAISING
+ zcx_abapgit_exception .
+ METHODS modify
+ IMPORTING
+ !iv_type TYPE zif_abapgit_persistence=>ty_type
+ !iv_value TYPE zif_abapgit_persistence=>ty_content-value
+ !iv_data TYPE zif_abapgit_persistence=>ty_content-data_str
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read
+ IMPORTING
+ !iv_type TYPE zif_abapgit_persistence=>ty_type
+ !iv_value TYPE zif_abapgit_persistence=>ty_content-value
+ RETURNING
+ VALUE(rv_data) TYPE zif_abapgit_persistence=>ty_content-data_str
+ RAISING
+ zcx_abapgit_not_found .
+ METHODS update
+ IMPORTING
+ !iv_type TYPE zif_abapgit_persistence=>ty_type
+ !iv_value TYPE zif_abapgit_persistence=>ty_content-value
+ !iv_data TYPE zif_abapgit_persistence=>ty_content-data_str
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS validate_entry_type
+ IMPORTING
+ !iv_type TYPE zif_abapgit_persistence=>ty_type
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA go_db TYPE REF TO zcl_abapgit_persistence_db .
+ DATA mv_update_function TYPE funcname .
+
+ METHODS get_update_function
+ RETURNING
+ VALUE(rv_funcname) TYPE funcname .
+ METHODS validate_and_unprettify_xml
+ IMPORTING
+ !iv_xml TYPE string
+ RETURNING
+ VALUE(rv_xml) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_persistence_repo DEFINITION
+ CREATE PROTECTED
+ FRIENDS ZCL_abapgit_persist_factory .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_persist_repo .
+ INTERFACES zif_abapgit_persist_repo_cs .
+
+ METHODS constructor .
+ METHODS rewrite_repo_meta
+ IMPORTING
+ !iv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception
+ zcx_abapgit_not_found.
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ DATA mt_meta_fields TYPE STANDARD TABLE OF abap_compname.
+ DATA mo_db TYPE REF TO zcl_abapgit_persistence_db .
+
+ METHODS from_xml
+ IMPORTING
+ !iv_repo_xml_string TYPE string
+ RETURNING
+ VALUE(rs_repo) TYPE zif_abapgit_persistence=>ty_repo_xml
+ RAISING
+ zcx_abapgit_exception .
+ METHODS to_xml
+ IMPORTING
+ !is_repo TYPE zif_abapgit_persistence=>ty_repo
+ RETURNING
+ VALUE(rv_repo_xml_string) TYPE string .
+ METHODS get_next_id
+ RETURNING
+ VALUE(rv_next_repo_id) TYPE zif_abapgit_persistence=>ty_content-value
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_repo_from_content
+ IMPORTING
+ is_content TYPE zif_abapgit_persistence=>ty_content
+ RETURNING
+ VALUE(rs_result) TYPE zif_abapgit_persistence=>ty_repo
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_persistence_user DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_persist_factory.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_persist_user .
+
+ METHODS constructor
+ IMPORTING
+ !iv_user TYPE sy-uname DEFAULT sy-uname.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_repo_config,
+ url TYPE zif_abapgit_persistence=>ty_repo-url,
+ login TYPE string,
+ git_user TYPE zif_abapgit_git_definitions=>ty_git_user,
+ last_change_seen TYPE string,
+ END OF ty_repo_config .
+ TYPES:
+ ty_repo_configs TYPE STANDARD TABLE OF ty_repo_config WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_user,
+ repo_show TYPE zif_abapgit_persistence=>ty_repo-key,
+ hide_files TYPE abap_bool,
+ changes_only TYPE abap_bool,
+ order_by TYPE string,
+ order_descending TYPE abap_bool,
+ diff_first TYPE abap_bool,
+ diff_unified TYPE abap_bool,
+ favorites TYPE zif_abapgit_persist_user=>ty_favorites,
+ repo_config TYPE ty_repo_configs,
+ settings TYPE zif_abapgit_persist_user=>ty_s_user_settings,
+ show_folders TYPE abap_bool,
+ list_settings TYPE zif_abapgit_persist_user=>ty_list_settings,
+ flow_settings TYPE zif_abapgit_persist_user=>ty_flow_settings,
+ END OF ty_user .
+
+ DATA mv_user TYPE sy-uname .
+ DATA ms_user TYPE ty_user.
+
+ METHODS from_xml
+ IMPORTING
+ !iv_xml TYPE string
+ RETURNING
+ VALUE(rs_user) TYPE ty_user.
+ METHODS read.
+ METHODS read_repo_config
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ RETURNING
+ VALUE(rs_repo_config) TYPE ty_repo_config
+ RAISING
+ zcx_abapgit_exception .
+ METHODS to_xml
+ IMPORTING
+ !is_user TYPE ty_user
+ RETURNING
+ VALUE(rv_xml) TYPE string .
+ METHODS update
+ RAISING
+ zcx_abapgit_exception .
+ METHODS update_repo_config
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ !is_repo_config TYPE ty_repo_config
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_object_filter_obj DEFINITION.
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object_filter.
+
+ METHODS constructor
+ IMPORTING
+ it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt.
+
+ PRIVATE SECTION.
+ DATA mt_filter TYPE zif_abapgit_definitions=>ty_tadir_tt.
+ENDCLASS.
+CLASS zcl_abapgit_object_filter_tran DEFINITION
+ CREATE PUBLIC.
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_object_filter.
+
+ METHODS set_filter_values
+ IMPORTING
+ iv_package TYPE tadir-devclass
+ it_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_filter_values
+ EXPORTING
+ ev_package TYPE tadir-devclass
+ et_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt.
+
+ PROTECTED SECTION.
+ TYPES: BEGIN OF ty_e071_filter,
+ pgmid TYPE tadir-pgmid,
+ object TYPE tadir-object,
+ obj_name TYPE trobj_name,
+ END OF ty_e071_filter,
+ ty_e071_filter_tt TYPE STANDARD TABLE OF ty_e071_filter.
+
+ METHODS adjust_local_filter
+ IMPORTING
+ it_e071_filter TYPE ty_e071_filter_tt
+ iv_package TYPE tadir-devclass
+ RETURNING VALUE(rt_filter) TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+
+ DATA mt_filter TYPE zif_abapgit_definitions=>ty_tadir_tt .
+ DATA mt_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt .
+ DATA mv_package TYPE tadir-devclass.
+
+ METHODS generate_local_filter
+ IMPORTING
+ iv_package TYPE tadir-devclass
+ it_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt
+ RETURNING
+ VALUE(rt_filter) TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS init .
+
+ METHODS get_all_sub_packages
+ IMPORTING
+ iv_package TYPE tadir-devclass
+ RETURNING
+ VALUE(rt_filter) TYPE zif_abapgit_definitions=>ty_tadir_tt.
+ENDCLASS.
+CLASS zcl_abapgit_repo_filter DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS apply
+ IMPORTING
+ it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt
+ CHANGING
+ ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt .
+
+ METHODS apply_object_filter
+ IMPORTING
+ it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt
+ io_dot TYPE REF TO zcl_abapgit_dot_abapgit OPTIONAL
+ iv_devclass TYPE devclass OPTIONAL
+ CHANGING
+ ct_files TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_merge DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_merge.
+
+ METHODS constructor
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ !iv_source_branch TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ ty_ancestor_tt TYPE STANDARD TABLE OF zif_abapgit_definitions=>ty_ancestor WITH DEFAULT KEY .
+ TYPES:
+ ty_visit_tt TYPE STANDARD TABLE OF zif_abapgit_git_definitions=>ty_sha1 WITH DEFAULT KEY .
+
+ DATA mi_repo_online TYPE REF TO zif_abapgit_repo_online .
+ DATA ms_merge TYPE zif_abapgit_merge=>ty_merge .
+ DATA mt_conflicts TYPE zif_abapgit_merge=>ty_merge_conflict_tt .
+ DATA mt_objects TYPE zif_abapgit_definitions=>ty_objects_tt .
+ DATA mv_source_branch TYPE string .
+
+ METHODS visit
+ IMPORTING
+ !iv_parent TYPE zif_abapgit_git_definitions=>ty_sha1
+ CHANGING
+ !ct_visit TYPE ty_visit_tt .
+ METHODS all_files
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_git_definitions=>ty_expanded_tt .
+ METHODS calculate_result
+ RAISING
+ zcx_abapgit_exception .
+ METHODS fetch_git
+ RETURNING
+ VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS find_ancestors
+ IMPORTING
+ !iv_commit TYPE zif_abapgit_git_definitions=>ty_sha1
+ RETURNING
+ VALUE(rt_ancestors) TYPE ty_ancestor_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS find_first_common
+ IMPORTING
+ !it_list1 TYPE ty_ancestor_tt
+ !it_list2 TYPE ty_ancestor_tt
+ RETURNING
+ VALUE(rs_common) TYPE zif_abapgit_definitions=>ty_ancestor
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_stage DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS method_description
+ IMPORTING
+ !iv_method TYPE zif_abapgit_definitions=>ty_method
+ RETURNING
+ VALUE(rv_description) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ IMPORTING
+ !iv_merge_source TYPE zif_abapgit_git_definitions=>ty_sha1 OPTIONAL .
+ METHODS add
+ IMPORTING
+ !iv_path TYPE zif_abapgit_git_definitions=>ty_file-path
+ !iv_filename TYPE zif_abapgit_git_definitions=>ty_file-filename
+ !iv_data TYPE xstring
+ !is_status TYPE zif_abapgit_definitions=>ty_result OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS reset
+ IMPORTING
+ !iv_path TYPE zif_abapgit_git_definitions=>ty_file-path
+ !iv_filename TYPE zif_abapgit_git_definitions=>ty_file-filename
+ RAISING
+ zcx_abapgit_exception .
+ METHODS rm
+ IMPORTING
+ !iv_path TYPE zif_abapgit_git_definitions=>ty_file-path
+ !iv_filename TYPE zif_abapgit_git_definitions=>ty_file-filename
+ !is_status TYPE zif_abapgit_definitions=>ty_result OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS ignore
+ IMPORTING
+ !iv_path TYPE zif_abapgit_git_definitions=>ty_file-path
+ !iv_filename TYPE zif_abapgit_git_definitions=>ty_file-filename
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_merge_source
+ RETURNING
+ VALUE(rv_source) TYPE zif_abapgit_git_definitions=>ty_sha1 .
+ METHODS count
+ RETURNING
+ VALUE(rv_count) TYPE i .
+ METHODS get_all
+ RETURNING
+ VALUE(rt_stage) TYPE zif_abapgit_definitions=>ty_stage_tt .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mt_stage TYPE zif_abapgit_definitions=>ty_stage_tt .
+ DATA mv_merge_source TYPE zif_abapgit_git_definitions=>ty_sha1 .
+
+ METHODS append
+ IMPORTING
+ !iv_path TYPE zif_abapgit_git_definitions=>ty_file-path
+ !iv_filename TYPE zif_abapgit_git_definitions=>ty_file-filename
+ !iv_method TYPE zif_abapgit_definitions=>ty_method
+ !is_status TYPE zif_abapgit_definitions=>ty_result OPTIONAL
+ !iv_data TYPE xstring OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_stage_logic DEFINITION
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_stage_logic.
+
+ CLASS-METHODS get_stage_logic
+ RETURNING
+ VALUE(ri_logic) TYPE REF TO zif_abapgit_stage_logic.
+
+ CLASS-METHODS set_stage_logic
+ IMPORTING
+ ii_logic TYPE REF TO zif_abapgit_stage_logic.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gi_stage_logic TYPE REF TO zif_abapgit_stage_logic.
+
+ CLASS-METHODS:
+ remove_ignored
+ IMPORTING ii_repo TYPE REF TO zif_abapgit_repo
+ CHANGING cs_files TYPE zif_abapgit_definitions=>ty_stage_files,
+ remove_identical
+ CHANGING cs_files TYPE zif_abapgit_definitions=>ty_stage_files.
+
+ENDCLASS.
+CLASS zcl_abapgit_status_calc DEFINITION
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_status_calc.
+
+ CLASS-METHODS get_instance
+ IMPORTING
+ !iv_root_package TYPE devclass
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ RETURNING
+ VALUE(ri_instance) TYPE REF TO zif_abapgit_status_calc.
+
+ METHODS constructor
+ IMPORTING
+ !iv_root_package TYPE devclass
+ !io_dot TYPE REF TO zcl_abapgit_dot_abapgit.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_root_package TYPE devclass.
+ DATA mo_dot TYPE REF TO zcl_abapgit_dot_abapgit.
+
+ METHODS process_local
+ IMPORTING
+ !it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ !it_state_idx TYPE zif_abapgit_git_definitions=>ty_file_signatures_ts
+ CHANGING
+ !ct_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ !ct_items TYPE zif_abapgit_definitions=>ty_items_tt
+ !ct_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS process_items
+ IMPORTING
+ !it_unprocessed_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ CHANGING
+ !ct_items TYPE zif_abapgit_definitions=>ty_items_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS process_remote
+ IMPORTING
+ !it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ !it_unprocessed_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ !it_state_idx TYPE zif_abapgit_git_definitions=>ty_file_signatures_ts
+ !it_items_idx TYPE zif_abapgit_definitions=>ty_items_ts
+ CHANGING
+ !ct_results TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS build_existing
+ IMPORTING
+ !is_local TYPE zif_abapgit_definitions=>ty_file_item
+ !is_remote TYPE zif_abapgit_git_definitions=>ty_file
+ !it_state TYPE zif_abapgit_git_definitions=>ty_file_signatures_ts
+ RETURNING
+ VALUE(rs_result) TYPE zif_abapgit_definitions=>ty_result.
+
+ CLASS-METHODS build_new_local
+ IMPORTING
+ !is_local TYPE zif_abapgit_definitions=>ty_file_item
+ RETURNING
+ VALUE(rs_result) TYPE zif_abapgit_definitions=>ty_result.
+
+ METHODS build_new_remote
+ IMPORTING
+ !is_remote TYPE zif_abapgit_git_definitions=>ty_file
+ !it_items_idx TYPE zif_abapgit_definitions=>ty_items_ts
+ !it_state_idx TYPE zif_abapgit_git_definitions=>ty_file_signatures_ts
+ RETURNING
+ VALUE(rs_result) TYPE zif_abapgit_definitions=>ty_result
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS get_object_package
+ IMPORTING
+ !iv_object TYPE tadir-object
+ !iv_obj_name TYPE tadir-obj_name
+ RETURNING
+ VALUE(rv_devclass) TYPE devclass
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS check_local_remote_consistency
+ IMPORTING
+ !is_local TYPE zif_abapgit_definitions=>ty_file_item
+ !is_remote TYPE zif_abapgit_git_definitions=>ty_file
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS ensure_state
+ IMPORTING
+ !it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ !it_cur_state TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RETURNING
+ VALUE(rt_state) TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt.
+
+ENDCLASS.
+CLASS zcl_abapgit_repo_item_state DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ METHODS local
+ RETURNING
+ VALUE(rv_state) TYPE zif_abapgit_git_definitions=>ty_item_state.
+ METHODS remote
+ RETURNING
+ VALUE(rv_state) TYPE zif_abapgit_git_definitions=>ty_item_state.
+ METHODS is_reassigned
+ RETURNING
+ VALUE(rv_is_reassigned) TYPE abap_bool.
+ METHODS is_unchanged
+ RETURNING
+ VALUE(rv_is_unchanged) TYPE abap_bool.
+ METHODS sum_with_repo_item
+ IMPORTING
+ !is_repo_item TYPE zif_abapgit_definitions=>ty_repo_item.
+ METHODS sum_with_status_item
+ IMPORTING
+ !is_status_item TYPE zif_abapgit_definitions=>ty_result.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mv_lstate TYPE zif_abapgit_git_definitions=>ty_item_state.
+ DATA mv_rstate TYPE zif_abapgit_git_definitions=>ty_item_state.
+ DATA mv_is_reassigned TYPE abap_bool.
+
+ CLASS-METHODS reduce
+ IMPORTING
+ iv_prev TYPE zif_abapgit_git_definitions=>ty_item_state
+ iv_cur TYPE zif_abapgit_git_definitions=>ty_item_state
+ RETURNING
+ VALUE(rv_new) TYPE zif_abapgit_git_definitions=>ty_item_state.
+ENDCLASS.
+CLASS zcl_abapgit_repo_labels DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_label_color,
+ label TYPE string,
+ color TYPE string,
+ END OF ty_label_color,
+ ty_label_colors TYPE STANDARD TABLE OF ty_label_color WITH KEY label.
+
+ TYPES:
+ BEGIN OF ty_color,
+ cls TYPE string,
+ fg TYPE string,
+ bg TYPE string,
+ border TYPE string,
+ END OF ty_color.
+
+ CONSTANTS c_allowed_chars TYPE string VALUE `-_. a-zA-Z0-9` ##NO_TEXT.
+
+ " it is easier to allow chars, though potentially other chars can be added later if needed
+ CLASS-METHODS class_constructor.
+ CLASS-METHODS validate
+ IMPORTING
+ !iv_labels TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS split
+ IMPORTING
+ !iv_labels TYPE string
+ RETURNING
+ VALUE(rt_labels) TYPE string_table.
+ CLASS-METHODS normalize
+ IMPORTING
+ !iv_labels TYPE string
+ RETURNING
+ VALUE(rv_labels) TYPE string.
+
+ CLASS-METHODS validate_colors
+ IMPORTING
+ !iv_config TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS split_colors
+ IMPORTING
+ !iv_config TYPE string
+ RETURNING
+ VALUE(rt_label_colors) TYPE ty_label_colors.
+ CLASS-METHODS split_colors_into_map
+ IMPORTING
+ !iv_config TYPE string
+ RETURNING
+ VALUE(ro_map) TYPE REF TO zcl_abapgit_string_map.
+ CLASS-METHODS normalize_colors
+ IMPORTING
+ !iv_config TYPE string
+ RETURNING
+ VALUE(rv_config) TYPE string.
+
+ CLASS-METHODS parse_color
+ IMPORTING
+ iv_color TYPE string
+ RETURNING
+ VALUE(rs_parsed) TYPE ty_color.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CLASS-DATA gv_regex TYPE string.
+
+ CLASS-METHODS validate_one_label_color
+ IMPORTING
+ !is_lc TYPE ty_label_color
+ !iv_index TYPE i DEFAULT 0
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS validate_rgb_color
+ IMPORTING
+ !iv_color TYPE string
+ !iv_index TYPE i DEFAULT 0
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_repo_news DEFINITION
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_log,
+ version TYPE string,
+ pos_to_cur TYPE i,
+ is_header TYPE abap_bool,
+ is_important TYPE abap_bool,
+ text TYPE string,
+ END OF ty_log.
+ TYPES:
+ ty_logs TYPE STANDARD TABLE OF ty_log WITH DEFAULT KEY.
+
+ CONSTANTS c_tail_length TYPE i VALUE 5 ##NO_TEXT. " Number of versions to display if no updates
+
+ CLASS-METHODS create " TODO REFACTOR
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_repo_news
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_log
+ RETURNING
+ VALUE(rt_log) TYPE ty_logs.
+ METHODS has_news
+ RETURNING
+ VALUE(rv_boolean) TYPE abap_bool.
+ METHODS has_important
+ RETURNING
+ VALUE(rv_boolean) TYPE abap_bool.
+ METHODS has_updates
+ RETURNING
+ VALUE(rv_boolean) TYPE abap_bool.
+ METHODS has_unseen
+ RETURNING
+ VALUE(rv_boolean) TYPE abap_bool.
+ METHODS constructor
+ IMPORTING
+ !iv_rawdata TYPE xstring
+ !iv_lastseen_version TYPE string
+ !iv_current_version TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mt_log TYPE ty_logs .
+ DATA mv_current_version TYPE string .
+ DATA mv_lastseen_version TYPE string .
+ DATA mv_latest_version TYPE string .
+
+ METHODS latest_version
+ RETURNING
+ VALUE(rv_version) TYPE string .
+ CLASS-METHODS parse_line
+ IMPORTING
+ !iv_line TYPE string
+ !iv_current_version TYPE string
+ RETURNING
+ VALUE(rs_log) TYPE ty_log .
+ CLASS-METHODS parse
+ IMPORTING
+ !it_lines TYPE string_table
+ !iv_current_version TYPE string
+ RETURNING
+ VALUE(rt_log) TYPE ty_logs .
+ENDCLASS.
+CLASS zcl_abapgit_repo_requirements DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ TYPES ty_cvers TYPE STANDARD TABLE OF cvers WITH DEFAULT KEY.
+
+ CLASS-METHODS requirements_popup
+ IMPORTING
+ !it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS is_requirements_met
+ IMPORTING
+ !it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt
+ RETURNING
+ VALUE(rv_status) TYPE zif_abapgit_definitions=>ty_yes_no
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS inject_cvers
+ IMPORTING
+ !it_cvers TYPE ty_cvers.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_requirement_status,
+ met TYPE abap_bool,
+ component TYPE tdevc-dlvunit,
+ description TYPE string,
+ installed_release TYPE saprelease,
+ installed_patch TYPE sappatchlv,
+ required_release TYPE saprelease,
+ required_patch TYPE sappatchlv,
+ END OF ty_requirement_status .
+ TYPES:
+ ty_requirement_status_tt TYPE STANDARD TABLE OF ty_requirement_status WITH DEFAULT KEY .
+
+ CLASS-DATA gt_cvers TYPE ty_cvers.
+
+ CLASS-METHODS get_cvers
+ RETURNING
+ VALUE(rt_cvers) TYPE ty_cvers
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS show_requirement_popup
+ IMPORTING
+ !it_requirements TYPE ty_requirement_status_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_requirement_met_status
+ IMPORTING
+ !it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt
+ RETURNING
+ VALUE(rt_status) TYPE ty_requirement_status_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS is_version_greater_or_equal
+ IMPORTING
+ !is_status TYPE ty_requirement_status
+ RETURNING
+ VALUE(rv_true) TYPE abap_bool .
+ENDCLASS.
+CLASS zcl_abapgit_version DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS normalize
+ IMPORTING
+ !iv_version TYPE string
+ RETURNING
+ VALUE(rv_version) TYPE string .
+ CLASS-METHODS conv_str_to_version
+ IMPORTING
+ !iv_version TYPE csequence
+ RETURNING
+ VALUE(rs_version) TYPE zif_abapgit_definitions=>ty_version
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS check_dependant_version
+ IMPORTING
+ !is_current TYPE zif_abapgit_definitions=>ty_version
+ !is_dependant TYPE zif_abapgit_definitions=>ty_version
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS compare
+ IMPORTING
+ !iv_a TYPE string OPTIONAL
+ !iv_b TYPE string OPTIONAL
+ !is_a TYPE zif_abapgit_definitions=>ty_version OPTIONAL
+ !is_b TYPE zif_abapgit_definitions=>ty_version OPTIONAL
+ RETURNING
+ VALUE(rv_result) TYPE i .
+ CLASS-METHODS get_version_constant_value
+ IMPORTING
+ iv_version_constant TYPE string
+ RETURNING
+ VALUE(rv_version) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-METHODS version_to_numeric
+ IMPORTING
+ !iv_version TYPE string
+ RETURNING
+ VALUE(rv_version) TYPE i.
+ENDCLASS.
+CLASS zcl_abapgit_zip DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS encode_files
+ IMPORTING
+ !it_files TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RETURNING
+ VALUE(rv_xstr) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS export
+ IMPORTING
+ !is_local_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings
+ !iv_package TYPE devclass
+ !io_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit
+ !iv_show_log TYPE abap_bool DEFAULT abap_true
+ !it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt OPTIONAL
+ RETURNING
+ VALUE(rv_xstr) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS export_object
+ IMPORTING
+ !iv_object_type TYPE trobjtype
+ !iv_object_name TYPE sobj_name
+ !iv_main_language_only TYPE abap_bool DEFAULT abap_false
+ !it_translation_langs TYPE zif_abapgit_definitions=>ty_languages OPTIONAL
+ !iv_use_lxe TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS export_package
+ IMPORTING
+ !iv_package TYPE devclass
+ !iv_folder_logic TYPE string
+ !iv_main_lang_only TYPE abap_bool
+ !iv_ign_subpkg TYPE abap_bool OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS load
+ IMPORTING
+ !iv_xstr TYPE xstring
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS save_binstring_to_localfile
+ IMPORTING
+ !iv_filename TYPE string
+ !iv_binstring TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-METHODS filename
+ IMPORTING
+ !iv_str TYPE string
+ EXPORTING
+ !ev_path TYPE string
+ !ev_filename TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS normalize_path
+ CHANGING
+ !ct_files TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS unzip_file
+ IMPORTING
+ !iv_xstr TYPE xstring
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_dot_abapgit DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS build_default
+ RETURNING
+ VALUE(ro_dot_abapgit) TYPE REF TO zcl_abapgit_dot_abapgit .
+ CLASS-METHODS deserialize
+ IMPORTING
+ !iv_xstr TYPE xstring
+ RETURNING
+ VALUE(ro_dot_abapgit) TYPE REF TO zcl_abapgit_dot_abapgit
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ IMPORTING
+ !is_data TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit .
+ METHODS serialize
+ RETURNING
+ VALUE(rv_xstr) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ METHODS to_file
+ RETURNING
+ VALUE(rs_file) TYPE zif_abapgit_git_definitions=>ty_file
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_data
+ RETURNING
+ VALUE(rs_data) TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit .
+ METHODS add_ignore
+ IMPORTING
+ !iv_path TYPE string
+ !iv_filename TYPE string .
+ METHODS is_ignored
+ IMPORTING
+ !iv_path TYPE string
+ !iv_filename TYPE string
+ RETURNING
+ VALUE(rv_ignored) TYPE abap_bool .
+ METHODS remove_ignore
+ IMPORTING
+ !iv_path TYPE string
+ !iv_filename TYPE string .
+ METHODS get_starting_folder
+ RETURNING
+ VALUE(rv_path) TYPE string .
+ METHODS get_folder_logic
+ RETURNING
+ VALUE(rv_logic) TYPE string .
+ METHODS set_folder_logic
+ IMPORTING
+ !iv_logic TYPE string .
+ METHODS set_starting_folder
+ IMPORTING
+ !iv_path TYPE string .
+ METHODS get_main_language
+ RETURNING
+ VALUE(rv_language) TYPE spras .
+ METHODS get_i18n_languages
+ RETURNING
+ VALUE(rt_languages) TYPE zif_abapgit_definitions=>ty_languages
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_i18n_languages
+ IMPORTING
+ it_languages TYPE zif_abapgit_definitions=>ty_languages
+ RAISING
+ zcx_abapgit_exception .
+ METHODS determine_i18n_parameters
+ IMPORTING
+ !iv_main_language_only TYPE abap_bool
+ RETURNING
+ VALUE(rs_i18n_params) TYPE zif_abapgit_definitions=>ty_i18n_params
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_signature
+ RETURNING
+ VALUE(rs_signature) TYPE zif_abapgit_git_definitions=>ty_file_signature
+ RAISING
+ zcx_abapgit_exception .
+ METHODS use_lxe
+ IMPORTING
+ !iv_yes TYPE abap_bool DEFAULT abap_undefined
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+ METHODS get_requirements
+ RETURNING
+ VALUE(rt_requirements) TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt .
+ METHODS set_requirements
+ IMPORTING
+ !it_requirements TYPE zif_abapgit_dot_abapgit=>ty_requirement_tt .
+ METHODS get_name
+ RETURNING
+ VALUE(rv_name) TYPE string.
+ METHODS set_name
+ IMPORTING
+ !iv_name TYPE csequence.
+ METHODS get_version_constant
+ RETURNING
+ VALUE(rv_version_constant) TYPE string .
+ METHODS set_version_constant
+ IMPORTING
+ !iv_version_constant TYPE csequence .
+ METHODS get_abap_language_version
+ RETURNING
+ VALUE(rv_abap_language_version) TYPE string .
+ METHODS set_abap_language_version
+ IMPORTING
+ !iv_abap_language_version TYPE string .
+ METHODS get_original_system
+ RETURNING
+ VALUE(rv_original_system) TYPE string .
+ METHODS set_original_system
+ IMPORTING
+ !iv_original_system TYPE csequence .
+ METHODS get_objs_without_translation
+ RETURNING
+ VALUE(rt_list) TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit-without_translation.
+ METHODS set_objs_without_translation
+ IMPORTING
+ !it_list TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit-without_translation.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA ms_data TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit .
+
+ CLASS-METHODS to_xml
+ IMPORTING
+ !is_data TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit
+ RETURNING
+ VALUE(rv_xml) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS from_xml
+ IMPORTING
+ !iv_xml TYPE string
+ RETURNING
+ VALUE(rs_data) TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit .
+ENDCLASS.
+CLASS zcl_abapgit_repo DEFINITION
+ ABSTRACT
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_repo .
+
+ ALIASES ms_data
+ FOR zif_abapgit_repo~ms_data .
+
+ ALIASES get_key FOR zif_abapgit_repo~get_key.
+ ALIASES get_name FOR zif_abapgit_repo~get_name.
+ ALIASES is_offline FOR zif_abapgit_repo~is_offline.
+ ALIASES get_package FOR zif_abapgit_repo~get_package.
+ ALIASES get_local_settings FOR zif_abapgit_repo~get_local_settings.
+ ALIASES get_tadir_objects FOR zif_abapgit_repo~get_tadir_objects.
+ ALIASES get_files_local_filtered FOR zif_abapgit_repo~get_files_local_filtered.
+ ALIASES get_files_local FOR zif_abapgit_repo~get_files_local.
+ ALIASES get_files_remote FOR zif_abapgit_repo~get_files_remote.
+ ALIASES refresh FOR zif_abapgit_repo~refresh.
+ ALIASES get_dot_abapgit FOR zif_abapgit_repo~get_dot_abapgit.
+ ALIASES set_dot_abapgit FOR zif_abapgit_repo~set_dot_abapgit.
+ ALIASES find_remote_dot_abapgit FOR zif_abapgit_repo~find_remote_dot_abapgit.
+ ALIASES deserialize FOR zif_abapgit_repo~deserialize.
+ ALIASES deserialize_checks FOR zif_abapgit_repo~deserialize_checks.
+ ALIASES checksums FOR zif_abapgit_repo~checksums.
+ ALIASES has_remote_source FOR zif_abapgit_repo~has_remote_source.
+ ALIASES get_log FOR zif_abapgit_repo~get_log.
+ ALIASES create_new_log FOR zif_abapgit_repo~create_new_log.
+ ALIASES get_dot_apack FOR zif_abapgit_repo~get_dot_apack.
+ ALIASES delete_checks FOR zif_abapgit_repo~delete_checks.
+ ALIASES set_files_remote FOR zif_abapgit_repo~set_files_remote.
+ ALIASES get_unsupported_objects_local FOR zif_abapgit_repo~get_unsupported_objects_local.
+ ALIASES set_local_settings FOR zif_abapgit_repo~set_local_settings.
+ ALIASES switch_repo_type FOR zif_abapgit_repo~switch_repo_type.
+ ALIASES refresh_local_object FOR zif_abapgit_repo~refresh_local_object.
+ ALIASES refresh_local_objects FOR zif_abapgit_repo~refresh_local_objects.
+ ALIASES get_data_config FOR zif_abapgit_repo~get_data_config.
+ ALIASES bind_listener FOR zif_abapgit_repo~bind_listener.
+ ALIASES remove_ignored_files FOR zif_abapgit_repo~remove_ignored_files.
+
+ METHODS constructor
+ IMPORTING
+ !is_data TYPE zif_abapgit_persistence=>ty_repo .
+
+ PROTECTED SECTION.
+
+ DATA mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt .
+ DATA mt_remote TYPE zif_abapgit_git_definitions=>ty_files_tt .
+ DATA mv_request_local_refresh TYPE abap_bool .
+ DATA mv_request_remote_refresh TYPE abap_bool .
+ DATA mi_log TYPE REF TO zif_abapgit_log .
+ DATA mi_listener TYPE REF TO zif_abapgit_repo_listener .
+ DATA mo_apack_reader TYPE REF TO zcl_abapgit_apack_reader .
+ DATA mi_data_config TYPE REF TO zif_abapgit_data_config .
+
+ METHODS find_remote_dot_apack
+ RETURNING
+ VALUE(ro_dot) TYPE REF TO zcl_abapgit_apack_reader
+ RAISING
+ zcx_abapgit_exception .
+ METHODS reset_remote .
+ METHODS set
+ IMPORTING
+ !iv_url TYPE zif_abapgit_persistence=>ty_repo-url OPTIONAL
+ !iv_branch_name TYPE zif_abapgit_persistence=>ty_repo-branch_name OPTIONAL
+ !iv_selected_commit TYPE zif_abapgit_persistence=>ty_repo-selected_commit OPTIONAL
+ !iv_head_branch TYPE zif_abapgit_persistence=>ty_repo-head_branch OPTIONAL
+ !iv_offline TYPE zif_abapgit_persistence=>ty_repo-offline OPTIONAL
+ !is_dot_abapgit TYPE zif_abapgit_persistence=>ty_repo-dot_abapgit OPTIONAL
+ !is_local_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings OPTIONAL
+ !iv_deserialized_at TYPE zif_abapgit_persistence=>ty_repo-deserialized_at OPTIONAL
+ !iv_deserialized_by TYPE zif_abapgit_persistence=>ty_repo-deserialized_by OPTIONAL
+ !iv_switched_origin TYPE zif_abapgit_persistence=>ty_repo-switched_origin OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_dot_apack
+ IMPORTING
+ !io_dot_apack TYPE REF TO zcl_abapgit_apack_reader
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+ METHODS check_language
+ RAISING
+ zcx_abapgit_exception .
+ METHODS check_write_protect
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_data
+ IMPORTING
+ !is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ CHANGING
+ !ct_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_dot_abapgit
+ CHANGING
+ !ct_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS deserialize_objects
+ IMPORTING
+ !is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ !ii_log TYPE REF TO zif_abapgit_log
+ CHANGING
+ !ct_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS normalize_local_settings
+ CHANGING
+ !cs_local_settings TYPE zif_abapgit_persistence=>ty_local_settings .
+ METHODS notify_listener
+ IMPORTING
+ !is_change_mask TYPE zif_abapgit_persistence=>ty_repo_meta_mask
+ RAISING
+ zcx_abapgit_exception .
+ METHODS update_last_deserialize
+ RAISING
+ zcx_abapgit_exception .
+ METHODS check_abap_language_version
+ RAISING
+ zcx_abapgit_exception .
+ METHODS remove_locally_excluded_files
+ CHANGING
+ !ct_rem_files TYPE zif_abapgit_git_definitions=>ty_files_tt OPTIONAL
+ !ct_loc_files TYPE zif_abapgit_definitions=>ty_files_item_tt OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+
+ENDCLASS.
+CLASS zcl_abapgit_repo_checksums DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_repo_checksums.
+
+ METHODS constructor
+ IMPORTING
+ !iv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS force_write
+ IMPORTING
+ it_checksums TYPE zif_abapgit_persistence=>ty_local_checksum_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ ty_local_files_by_item_tt TYPE SORTED TABLE OF zif_abapgit_definitions=>ty_file_item WITH NON-UNIQUE KEY item.
+
+ DATA mv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key.
+ DATA mi_repo TYPE REF TO zif_abapgit_repo.
+
+ METHODS remove_non_code_related_files
+ CHANGING
+ !ct_local_files TYPE ty_local_files_by_item_tt.
+
+ METHODS build_checksums_from_files
+ IMPORTING
+ it_local TYPE ty_local_files_by_item_tt
+ RETURNING
+ VALUE(rt_checksums) TYPE zif_abapgit_persistence=>ty_local_checksum_tt.
+
+ METHODS save_checksums
+ IMPORTING
+ it_checksums TYPE zif_abapgit_persistence=>ty_local_checksum_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS add_meta
+ CHANGING
+ cv_cs_blob TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS extract_meta
+ CHANGING
+* co_string_map - return string map with meta when it is needed
+ cv_cs_blob TYPE string.
+
+ METHODS get_latest_local_files
+ IMPORTING
+ it_updated_files TYPE zif_abapgit_git_definitions=>ty_file_signatures_tt
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_repo_content_list DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS constructor
+ IMPORTING ii_repo TYPE REF TO zif_abapgit_repo.
+
+ METHODS list
+ IMPORTING iv_path TYPE string
+ iv_by_folders TYPE abap_bool OPTIONAL
+ iv_changes_only TYPE abap_bool OPTIONAL
+ iv_transports TYPE abap_bool OPTIONAL
+ RETURNING VALUE(rt_repo_items) TYPE zif_abapgit_definitions=>ty_repo_item_tt
+ RAISING zcx_abapgit_exception.
+
+ METHODS get_log
+ RETURNING VALUE(ri_log) TYPE REF TO zif_abapgit_log.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS: BEGIN OF c_sortkey,
+ default TYPE i VALUE 9999,
+ parent_dir TYPE i VALUE 0,
+ dir TYPE i VALUE 1,
+ orphan TYPE i VALUE 2,
+ changed TYPE i VALUE 3,
+ inactive TYPE i VALUE 4,
+ END OF c_sortkey.
+
+ DATA: mi_repo TYPE REF TO zif_abapgit_repo,
+ mi_log TYPE REF TO zif_abapgit_log.
+
+ METHODS build_repo_items
+ RETURNING VALUE(rt_repo_items) TYPE zif_abapgit_definitions=>ty_repo_item_tt
+ RAISING zcx_abapgit_exception.
+
+ METHODS build_folders
+ IMPORTING iv_cur_dir TYPE string
+ CHANGING ct_repo_items TYPE zif_abapgit_definitions=>ty_repo_item_tt
+ RAISING zcx_abapgit_exception.
+
+ METHODS determine_transports
+ CHANGING ct_repo_items TYPE zif_abapgit_definitions=>ty_repo_item_tt.
+
+ METHODS filter_changes
+ CHANGING ct_repo_items TYPE zif_abapgit_definitions=>ty_repo_item_tt.
+
+ METHODS check_repo_size
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_repo_cs_migration DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ CLASS-METHODS run
+ RAISING
+ zcx_abapgit_exception
+ zcx_abapgit_not_found.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES:
+ ty_repo_ids TYPE SORTED TABLE OF zif_abapgit_persistence=>ty_repo-key WITH UNIQUE KEY table_line.
+
+ CLASS-METHODS get_unconverted_repo_ids
+ RETURNING
+ VALUE(rt_repo_ids) TYPE ty_repo_ids.
+ CLASS-METHODS clear_repo_metadata
+ IMPORTING
+ iv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception
+ zcx_abapgit_not_found.
+ CLASS-METHODS convert_checksums
+ IMPORTING
+ iv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception
+ zcx_abapgit_not_found.
+
+ENDCLASS.
+CLASS zcl_abapgit_repo_offline DEFINITION
+ INHERITING FROM zcl_abapgit_repo
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ PROTECTED SECTION.
+
+ METHODS reset_remote
+ REDEFINITION .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_repo_online DEFINITION
+ INHERITING FROM zcl_abapgit_repo
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_repo_online .
+
+ ALIASES get_url FOR zif_abapgit_repo_online~get_url.
+ ALIASES get_selected_branch FOR zif_abapgit_repo_online~get_selected_branch.
+ ALIASES set_url FOR zif_abapgit_repo_online~set_url.
+ ALIASES select_branch FOR zif_abapgit_repo_online~select_branch.
+ ALIASES get_selected_commit FOR zif_abapgit_repo_online~get_selected_commit.
+ ALIASES get_current_remote FOR zif_abapgit_repo_online~get_current_remote.
+ ALIASES select_commit FOR zif_abapgit_repo_online~select_commit.
+ ALIASES switch_origin FOR zif_abapgit_repo_online~switch_origin.
+ ALIASES get_switched_origin FOR zif_abapgit_repo_online~get_switched_origin.
+ ALIASES push FOR zif_abapgit_repo_online~push.
+ ALIASES create_branch FOR zif_abapgit_repo_online~create_branch.
+ ALIASES check_for_valid_branch FOR zif_abapgit_repo_online~check_for_valid_branch.
+ ALIASES get_remote_settings FOR zif_abapgit_repo_online~get_remote_settings.
+
+ METHODS zif_abapgit_repo~get_files_remote
+ REDEFINITION .
+ METHODS zif_abapgit_repo~get_name
+ REDEFINITION .
+ METHODS zif_abapgit_repo~has_remote_source
+ REDEFINITION .
+ METHODS constructor
+ IMPORTING
+ is_data TYPE zif_abapgit_persistence=>ty_repo.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mt_objects TYPE zif_abapgit_definitions=>ty_objects_tt .
+ DATA mv_current_commit TYPE zif_abapgit_git_definitions=>ty_sha1 .
+
+ METHODS handle_stage_ignore
+ IMPORTING
+ !io_stage TYPE REF TO zcl_abapgit_stage
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_objects
+ IMPORTING
+ !it_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS fetch_remote
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_objects
+ RETURNING
+ VALUE(rt_objects) TYPE zif_abapgit_definitions=>ty_objects_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS raise_error_if_branch_exists
+ IMPORTING
+ iv_name TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_repo_srv DEFINITION
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_repo_srv .
+ INTERFACES zif_abapgit_repo_listener .
+
+ CLASS-METHODS get_instance
+ RETURNING
+ VALUE(ri_srv) TYPE REF TO zif_abapgit_repo_srv .
+ CLASS-METHODS inject_instance
+ IMPORTING
+ ii_srv TYPE REF TO zif_abapgit_repo_srv OPTIONAL.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_main_branch TYPE string VALUE 'main'.
+
+ CLASS-DATA gi_ref TYPE REF TO zif_abapgit_repo_srv .
+ DATA mv_init TYPE abap_bool.
+ DATA mv_only_favorites TYPE abap_bool.
+ DATA mt_list TYPE zif_abapgit_repo_srv=>ty_repo_list .
+
+ METHODS create_initial_branch
+ IMPORTING
+ !iv_url TYPE string
+ !iv_readme TYPE string OPTIONAL
+ !iv_branch_name TYPE string DEFAULT c_main_branch
+ RETURNING
+ VALUE(rv_name) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS determine_branch_name
+ IMPORTING
+ !iv_name TYPE string
+ !iv_url TYPE string
+ RETURNING
+ VALUE(rv_name) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS refresh_all
+ RAISING
+ zcx_abapgit_exception .
+ METHODS refresh_favorites
+ RAISING
+ zcx_abapgit_exception .
+ METHODS instantiate_and_add
+ IMPORTING
+ !is_repo_meta TYPE zif_abapgit_persistence=>ty_repo
+ RETURNING
+ VALUE(ri_repo) TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+ METHODS reinstantiate_repo
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !is_meta TYPE zif_abapgit_persistence=>ty_repo_xml
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS validate_sub_super_packages
+ IMPORTING
+ !iv_package TYPE devclass
+ !it_repos TYPE zif_abapgit_persistence=>ty_repos
+ !iv_ign_subpkg TYPE abap_bool DEFAULT abap_false
+ EXPORTING
+ VALUE(ei_repo) TYPE REF TO zif_abapgit_repo
+ !ev_reason TYPE string
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS validate_package_korrflag
+ IMPORTING
+ !iv_package TYPE devclass
+ !iv_ign_subpkg TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_repo_status DEFINITION
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS calculate
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !ii_log TYPE REF TO zif_abapgit_log OPTIONAL
+ !ii_obj_filter TYPE REF TO zif_abapgit_object_filter OPTIONAL
+ RETURNING
+ VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_syntax_factory DEFINITION
+ ABSTRACT
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_filename TYPE string
+ !iv_hidden_chars TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_syntax_highlighter .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_syntax_highlighter DEFINITION
+ ABSTRACT
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS process_line
+ IMPORTING
+ !iv_line TYPE string
+ RETURNING
+ VALUE(rv_line) TYPE string .
+ METHODS set_hidden_chars
+ IMPORTING
+ !iv_hidden_chars TYPE abap_bool .
+ PROTECTED SECTION.
+
+ TYPES:
+ BEGIN OF ty_match,
+ token TYPE c LENGTH 1, " Type of matches
+ offset TYPE i, " Beginning position of the string that should be formatted
+ length TYPE i, " Length of the string that should be formatted
+ text_tag TYPE string, " Type of text tag
+ END OF ty_match .
+ TYPES:
+ ty_match_tt TYPE STANDARD TABLE OF ty_match WITH DEFAULT KEY .
+ TYPES:
+ BEGIN OF ty_rule,
+ regex TYPE REF TO cl_abap_regex,
+ token TYPE c LENGTH 1,
+ style TYPE string,
+ relevant_submatch TYPE i,
+ END OF ty_rule .
+
+ CONSTANTS c_token_none TYPE c VALUE '.' ##NO_TEXT.
+ DATA:
+ mt_rules TYPE STANDARD TABLE OF ty_rule .
+ DATA mv_hidden_chars TYPE abap_bool .
+
+ METHODS add_rule
+ IMPORTING
+ !iv_regex TYPE string
+ !iv_token TYPE c
+ !iv_style TYPE string
+ !iv_submatch TYPE i OPTIONAL .
+ METHODS parse_line
+ IMPORTING
+ !iv_line TYPE string
+ RETURNING
+ VALUE(rt_matches) TYPE ty_match_tt .
+ METHODS order_matches
+ IMPORTING
+ !iv_line TYPE string
+ CHANGING
+ !ct_matches TYPE ty_match_tt .
+ METHODS extend_matches
+ IMPORTING
+ !iv_line TYPE string
+ CHANGING
+ !ct_matches TYPE ty_match_tt .
+ METHODS format_line
+ IMPORTING
+ !iv_line TYPE string
+ !it_matches TYPE ty_match_tt
+ RETURNING
+ VALUE(rv_line) TYPE string .
+ METHODS apply_style
+ IMPORTING
+ !iv_line TYPE string
+ !iv_class TYPE string
+ RETURNING
+ VALUE(rv_line) TYPE string .
+ METHODS is_whitespace
+ IMPORTING
+ !iv_string TYPE string
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool .
+ METHODS show_hidden_chars
+ IMPORTING
+ !iv_line TYPE string
+ RETURNING
+ VALUE(rv_line) TYPE string .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_syntax_abap DEFINITION
+ INHERITING FROM zcl_abapgit_syntax_highlighter
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ CLASS-METHODS class_constructor.
+ METHODS constructor.
+
+ CONSTANTS:
+ BEGIN OF c_css,
+ keyword TYPE string VALUE 'keyword',
+ text TYPE string VALUE 'text',
+ comment TYPE string VALUE 'comment',
+ END OF c_css,
+
+ BEGIN OF c_token,
+ keyword TYPE c VALUE 'K',
+ text TYPE c VALUE 'T',
+ comment TYPE c VALUE 'C',
+ END OF c_token,
+
+ BEGIN OF c_regex,
+ comment TYPE string VALUE '##|"|^\*',
+ text TYPE string VALUE '`|''|\||\{|\}',
+ keyword TYPE string VALUE '&&|\b[-_a-z0-9]+\b',
+ END OF c_regex.
+
+ PROTECTED SECTION.
+
+ CLASS-DATA gt_keywords TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line.
+
+ CLASS-METHODS init_keywords.
+ CLASS-METHODS is_keyword
+ IMPORTING iv_chunk TYPE string
+ RETURNING VALUE(rv_yes) TYPE abap_bool.
+
+ METHODS order_matches REDEFINITION.
+ METHODS parse_line REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_syntax_css DEFINITION
+ INHERITING FROM zcl_abapgit_syntax_highlighter
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ " CSS Standard https://www.w3.org/TR/css-2018/
+ " CSS Reference https://www.w3schools.com/cssref/default.asp
+
+ " We used a mixture of above as reference for the keyword list
+ " 1) CSS Properties https://www.w3schools.com/cssref/default.asp
+ " 2) CSS Values & Units https://www.w3schools.com/cssref/css_units.asp
+ " 3) CSS Selectors https://www.w3.org/TR/css-2018/#selectors
+ " 4) CSS Functions https://www.w3schools.com/cssref/css_functions.asp
+ " 5) CSS Colors https://www.w3schools.com/colors/colors_names.asp
+ " 6) CSS Extensions
+ " 7) CSS At-Rules https://www.w3.org/TR/css-2018/#at-rules
+ " 8) HTML Tags
+
+ CONSTANTS:
+ BEGIN OF c_css,
+ keyword TYPE string VALUE 'keyword',
+ text TYPE string VALUE 'text',
+ comment TYPE string VALUE 'comment',
+ selectors TYPE string VALUE 'selectors',
+ units TYPE string VALUE 'units',
+ properties TYPE string VALUE 'properties',
+ values TYPE string VALUE 'values',
+ functions TYPE string VALUE 'functions',
+ colors TYPE string VALUE 'colors',
+ extensions TYPE string VALUE 'extensions',
+ at_rules TYPE string VALUE 'at_rules',
+ html TYPE string VALUE 'html',
+ END OF c_css .
+ CONSTANTS:
+ BEGIN OF c_token,
+ keyword TYPE c VALUE 'K',
+ text TYPE c VALUE 'T',
+ comment TYPE c VALUE 'C',
+ selectors TYPE c VALUE 'S',
+ units TYPE c VALUE 'U',
+ properties TYPE c VALUE 'P',
+ values TYPE c VALUE 'V',
+ functions TYPE c VALUE 'F',
+ colors TYPE c VALUE 'Z',
+ extensions TYPE c VALUE 'E',
+ at_rules TYPE c VALUE 'A',
+ html TYPE c VALUE 'H',
+ END OF c_token .
+ CONSTANTS:
+ BEGIN OF c_regex,
+ " comments /* ... */
+ comment TYPE string VALUE '\/\*.*\*\/|\/\*|\*\/',
+ " single or double quoted strings
+ text TYPE string VALUE '("[^"]*")|(''[^'']*'')|(`[^`]*`)',
+ " in general keywords don't contain numbers (except -ms-scrollbar-3dlight-color)
+ keyword TYPE string VALUE '\b[a-z3@\-]+\b',
+ " selectors begin with :
+ selectors TYPE string VALUE ':[:a-z]+\b',
+ " units
+ units TYPE string
+ VALUE '\b[0-9\. ]+(ch|cm|em|ex|in|mm|pc|pt|px|vh|vmax|vmin|vw)\b|\b[0-9\. ]+%',
+ END OF c_regex .
+
+ CLASS-METHODS class_constructor .
+ METHODS constructor .
+ PROTECTED SECTION.
+ TYPES: ty_token TYPE c LENGTH 1.
+
+ TYPES: BEGIN OF ty_keyword,
+ keyword TYPE string,
+ token TYPE ty_token,
+ END OF ty_keyword.
+
+ CLASS-DATA gt_keywords TYPE HASHED TABLE OF ty_keyword WITH UNIQUE KEY keyword.
+ CLASS-DATA gv_comment TYPE abap_bool.
+
+ CLASS-METHODS init_keywords.
+ CLASS-METHODS insert_keywords
+ IMPORTING
+ iv_keywords TYPE string
+ iv_token TYPE ty_token.
+ CLASS-METHODS is_keyword
+ IMPORTING iv_chunk TYPE string
+ RETURNING VALUE(rv_yes) TYPE abap_bool.
+
+ METHODS order_matches REDEFINITION.
+ METHODS parse_line REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_syntax_js DEFINITION
+ INHERITING FROM zcl_abapgit_syntax_highlighter
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CONSTANTS:
+ " JavaScript
+ " 1) General keywords
+ " 2) Variable types
+ " 3) HTML Tags
+ BEGIN OF c_css,
+ keyword TYPE string VALUE 'keyword',
+ text TYPE string VALUE 'text',
+ comment TYPE string VALUE 'comment',
+ variables TYPE string VALUE 'variables',
+ END OF c_css .
+ CONSTANTS:
+ BEGIN OF c_token,
+ keyword TYPE c VALUE 'K',
+ text TYPE c VALUE 'T',
+ comment TYPE c VALUE 'C',
+ variables TYPE c VALUE 'V',
+ END OF c_token .
+ CONSTANTS:
+ BEGIN OF c_regex,
+ " comments /* ... */ or //
+ comment TYPE string VALUE '\/\*.*\*\/|\/\*|\*\/|\/\/',
+ " single or double quoted strings
+ text TYPE string VALUE '"|''|`',
+ " in general keywords don't contain numbers (except -ms-scrollbar-3dlight-color)
+ keyword TYPE string VALUE '\b[a-z-]+\b',
+ END OF c_regex .
+
+ CLASS-METHODS class_constructor .
+ METHODS constructor .
+ PROTECTED SECTION.
+ TYPES: ty_token TYPE c LENGTH 1.
+
+ TYPES: BEGIN OF ty_keyword,
+ keyword TYPE string,
+ token TYPE ty_token,
+ END OF ty_keyword.
+
+ CLASS-DATA gt_keywords TYPE HASHED TABLE OF ty_keyword WITH UNIQUE KEY keyword.
+ CLASS-DATA gv_comment TYPE abap_bool.
+
+ CLASS-METHODS init_keywords.
+ CLASS-METHODS insert_keywords
+ IMPORTING
+ iv_keywords TYPE string
+ iv_token TYPE ty_token.
+ CLASS-METHODS is_keyword
+ IMPORTING iv_chunk TYPE string
+ RETURNING VALUE(rv_yes) TYPE abap_bool.
+
+ METHODS order_matches REDEFINITION.
+ METHODS parse_line REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_syntax_json DEFINITION
+ INHERITING FROM zcl_abapgit_syntax_highlighter
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CONSTANTS:
+ " JSON... This was easy :-)
+ " JSONC... With comments
+ BEGIN OF c_css,
+ keyword TYPE string VALUE 'selectors', "#EC NOTEXT
+ text TYPE string VALUE 'text', "#EC NOTEXT
+ values TYPE string VALUE 'properties', "#EC NOTEXT
+ comment TYPE string VALUE 'comment', "#EC NOTEXT
+ END OF c_css.
+ CONSTANTS:
+ BEGIN OF c_token,
+ keyword TYPE c VALUE 'K', "#EC NOTEXT
+ text TYPE c VALUE 'T', "#EC NOTEXT
+ values TYPE c VALUE 'V', "#EC NOTEXT
+ comment TYPE c VALUE 'C', "#EC NOTEXT
+ END OF c_token.
+ CONSTANTS:
+ BEGIN OF c_regex,
+ " comments /* ... */ or //
+ comment TYPE string VALUE '\/\*.*\*\/|\/\*|\*\/|\/\/', "#EC NOTEXT
+ " not much here
+ keyword TYPE string VALUE 'true|false|null', "#EC NOTEXT
+ " double quoted strings
+ text TYPE string VALUE '"', "#EC NOTEXT
+ END OF c_regex.
+
+ METHODS constructor.
+ PROTECTED SECTION.
+
+ METHODS order_matches REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_syntax_po DEFINITION
+ INHERITING FROM zcl_abapgit_syntax_highlighter
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ METHODS constructor.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_style,
+ msgid TYPE string VALUE 'keyword',
+ msgstr TYPE string VALUE 'xml_tag',
+ comment TYPE string VALUE 'comment',
+ END OF c_style.
+ CONSTANTS:
+ BEGIN OF c_token,
+ msgid TYPE c VALUE 'I',
+ msgstr TYPE c VALUE 'S',
+ comment TYPE c VALUE 'C',
+ END OF c_token.
+ CONSTANTS:
+ BEGIN OF c_regex,
+ msgid TYPE string VALUE '^msgid\b',
+ msgstr TYPE string VALUE '^msgstr\b',
+ comment TYPE string VALUE '^#.*',
+ END OF c_regex.
+
+ENDCLASS.
+CLASS zcl_abapgit_syntax_txt DEFINITION
+ INHERITING FROM zcl_abapgit_syntax_highlighter
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS constructor .
+
+ METHODS process_line
+ REDEFINITION .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_syntax_xml DEFINITION
+ INHERITING FROM zcl_abapgit_syntax_highlighter
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_css,
+ xml_tag TYPE string VALUE 'xml_tag',
+ attr TYPE string VALUE 'attr',
+ attr_val TYPE string VALUE 'attr_val',
+ comment TYPE string VALUE 'comment',
+ END OF c_css .
+ CONSTANTS:
+ BEGIN OF c_token,
+ xml_tag TYPE c VALUE 'X',
+ attr TYPE c VALUE 'A',
+ attr_val TYPE c VALUE 'V',
+ comment TYPE c VALUE 'C',
+ END OF c_token .
+ CONSTANTS:
+ BEGIN OF c_regex,
+ "for XML tags, we will use a submatch
+ " main pattern includes quoted strings so we can ignore < and > in attr values
+ xml_tag TYPE string VALUE '(?:"[^"]*")|(?:''[^'']*'')|(?:`[^`]*`)|([<>])',
+ attr TYPE string VALUE '(?:^|\s)[-a-z:_0-9]+\s*(?==\s*["|''|`])',
+ attr_val TYPE string VALUE '("[^"]*")|(''[^'']*'')|(`[^`]*`)',
+ " comments
+ comment TYPE string VALUE '[\<]!--.*--[\>]|[\<]!--|--[\>]',
+ END OF c_regex .
+
+ METHODS constructor .
+ PROTECTED SECTION.
+ CLASS-DATA gv_comment TYPE abap_bool.
+
+ METHODS order_matches REDEFINITION.
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_gui DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_services .
+
+ CONSTANTS:
+ BEGIN OF c_event_state,
+ not_handled TYPE i VALUE 0,
+ re_render TYPE i VALUE 1,
+ new_page TYPE i VALUE 2,
+ go_back TYPE i VALUE 3,
+ no_more_act TYPE i VALUE 4,
+ new_page_w_bookmark TYPE i VALUE 5,
+ go_back_to_bookmark TYPE i VALUE 6,
+ new_page_replacing TYPE i VALUE 7,
+ END OF c_event_state .
+
+ METHODS go_home
+ IMPORTING
+ iv_action TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS back
+ IMPORTING
+ !iv_to_bookmark TYPE abap_bool DEFAULT abap_false
+ !iv_graceful TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rv_exit) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS back_graceful
+ RETURNING
+ VALUE(rv_handled) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS on_event
+ FOR EVENT sapevent OF zif_abapgit_html_viewer
+ IMPORTING
+ !action
+ !frame
+ !getdata
+ !postdata
+ !query_table .
+ METHODS constructor
+ IMPORTING
+ !io_component TYPE REF TO object OPTIONAL
+ !ii_asset_man TYPE REF TO zif_abapgit_gui_asset_manager OPTIONAL
+ !ii_hotkey_ctl TYPE REF TO zif_abapgit_gui_hotkey_ctl OPTIONAL
+ !ii_html_processor TYPE REF TO zif_abapgit_gui_html_processor OPTIONAL
+ !iv_rollback_on_error TYPE abap_bool DEFAULT abap_true
+ RAISING
+ zcx_abapgit_exception .
+ METHODS free .
+ METHODS set_focus
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_page_stack,
+ page TYPE REF TO zif_abapgit_gui_renderable,
+ bookmark TYPE abap_bool,
+ END OF ty_page_stack .
+
+ DATA mv_rollback_on_error TYPE abap_bool .
+ DATA mi_cur_page TYPE REF TO zif_abapgit_gui_renderable .
+ DATA mt_stack TYPE STANDARD TABLE OF ty_page_stack .
+ DATA mt_event_handlers TYPE STANDARD TABLE OF REF TO zif_abapgit_gui_event_handler .
+ DATA mi_router TYPE REF TO zif_abapgit_gui_event_handler .
+ DATA mi_asset_man TYPE REF TO zif_abapgit_gui_asset_manager .
+ DATA mi_hotkey_ctl TYPE REF TO zif_abapgit_gui_hotkey_ctl .
+ DATA mi_html_processor TYPE REF TO zif_abapgit_gui_html_processor .
+ DATA mi_html_viewer TYPE REF TO zif_abapgit_html_viewer .
+ DATA mo_html_parts TYPE REF TO zcl_abapgit_html_parts .
+ DATA mi_common_log TYPE REF TO zif_abapgit_log .
+ METHODS cache_html
+ IMPORTING
+ !iv_text TYPE string
+ RETURNING
+ VALUE(rv_url) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS startup
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render
+ RAISING
+ zcx_abapgit_exception .
+ METHODS call_page
+ IMPORTING
+ !ii_page TYPE REF TO zif_abapgit_gui_renderable
+ !iv_with_bookmark TYPE abap_bool DEFAULT abap_false
+ !iv_replacing TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception .
+ METHODS handle_action
+ IMPORTING
+ !iv_action TYPE c
+ !iv_getdata TYPE c OPTIONAL
+ !it_postdata TYPE zif_abapgit_html_viewer=>ty_post_data OPTIONAL .
+ METHODS handle_error
+ IMPORTING
+ !iv_state TYPE i
+ !ix_exception TYPE REF TO zcx_abapgit_exception .
+ METHODS is_page_modal
+ IMPORTING
+ !ii_page TYPE REF TO zif_abapgit_gui_renderable
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+ METHODS is_new_page
+ IMPORTING
+ !iv_state TYPE i
+ RETURNING
+ VALUE(rv_new_page) TYPE abap_bool.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_asset_manager DEFINITION FINAL CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_asset_manager.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_asset_manager) TYPE REF TO zif_abapgit_gui_asset_manager.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_asset_entry.
+ INCLUDE TYPE zif_abapgit_gui_asset_manager~ty_web_asset.
+ TYPES: mime_name TYPE wwwdatatab-objid,
+ END OF ty_asset_entry.
+ TYPES:
+ ty_asset_register TYPE STANDARD TABLE OF ty_asset_entry WITH KEY url.
+
+ DATA mt_asset_register TYPE ty_asset_register.
+
+ METHODS get_mime_asset
+ IMPORTING
+ iv_mime_name TYPE c
+ RETURNING
+ VALUE(rv_xdata) TYPE xstring
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS load_asset
+ IMPORTING
+ is_asset_entry TYPE ty_asset_entry
+ RETURNING
+ VALUE(rs_asset) TYPE zif_abapgit_gui_asset_manager~ty_web_asset
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_css_processor DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ METHODS:
+ constructor
+ IMPORTING
+ ii_asset_manager TYPE REF TO zif_abapgit_gui_asset_manager,
+ add_file
+ IMPORTING
+ iv_url TYPE string,
+ process
+ RETURNING
+ VALUE(rv_result) TYPE string
+ RAISING zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_css_var,
+ name TYPE string,
+ value TYPE string,
+ END OF ty_css_var,
+ ty_css_vars TYPE SORTED TABLE OF ty_css_var WITH UNIQUE KEY name.
+
+ METHODS:
+ get_css_vars_in_string
+ IMPORTING
+ iv_string TYPE string
+ RETURNING
+ VALUE(rt_variables) TYPE ty_css_vars,
+ resolve_var_recursively
+ IMPORTING
+ iv_variable_name TYPE string
+ CHANGING
+ ct_variables TYPE ty_css_vars
+ RAISING
+ zcx_abapgit_exception.
+ DATA:
+ mi_asset_manager TYPE REF TO zif_abapgit_gui_asset_manager,
+ mt_files TYPE string_table.
+ENDCLASS.
+CLASS zcl_abapgit_gui_event DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event .
+
+ CLASS-METHODS class_constructor .
+
+ CLASS-METHODS new
+ IMPORTING
+ !ii_gui_services TYPE REF TO zif_abapgit_gui_services OPTIONAL
+ !iv_action TYPE clike
+ !iv_getdata TYPE clike OPTIONAL
+ !it_postdata TYPE zif_abapgit_html_viewer=>ty_post_data OPTIONAL
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_gui_event.
+ METHODS constructor
+ IMPORTING
+ !ii_gui_services TYPE REF TO zif_abapgit_gui_services OPTIONAL
+ !iv_action TYPE clike
+ !iv_getdata TYPE clike OPTIONAL
+ !it_postdata TYPE zif_abapgit_html_viewer=>ty_post_data OPTIONAL .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mo_query TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+
+ CLASS-DATA gv_non_breaking_space TYPE string .
+
+ TYPES: BEGIN OF ty_name_value,
+ name TYPE string,
+ value TYPE string,
+ END OF ty_name_value.
+ TYPES ty_name_value_tt TYPE STANDARD TABLE OF ty_name_value WITH DEFAULT KEY.
+
+ METHODS fields_to_map
+ IMPORTING
+ it_fields TYPE ty_name_value_tt
+ RETURNING
+ VALUE(ro_string_map) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS parse_post_form_data
+ IMPORTING
+ !it_post_data TYPE zif_abapgit_html_viewer=>ty_post_data
+ !iv_upper_cased TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rt_fields) TYPE ty_name_value_tt .
+ CLASS-METHODS parse_fields
+ IMPORTING
+ !iv_string TYPE clike
+ !iv_upper_cased TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rt_fields) TYPE ty_name_value_tt .
+
+ CLASS-METHODS parse_fields_upper_case_name
+ IMPORTING
+ !iv_string TYPE clike
+ RETURNING
+ VALUE(rt_fields) TYPE ty_name_value_tt .
+
+ CLASS-METHODS translate_postdata
+ IMPORTING
+ !it_postdata TYPE zif_abapgit_html_viewer=>ty_post_data
+ RETURNING
+ VALUE(rv_string) TYPE string .
+
+ CLASS-METHODS field_keys_to_upper
+ CHANGING
+ !ct_fields TYPE ty_name_value_tt .
+ CLASS-METHODS unescape
+ IMPORTING
+ !iv_string TYPE string
+ RETURNING
+ VALUE(rv_string) TYPE string .
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_html_processor DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CONSTANTS c_css_build_name TYPE string VALUE 'css/bundle.css'.
+ CONSTANTS c_preprocess_marker TYPE string VALUE ``.
+ CONSTANTS c_comment_start TYPE string VALUE ``.
+
+ INTERFACES zif_abapgit_gui_html_processor .
+
+ METHODS constructor
+ IMPORTING
+ ii_asset_man TYPE REF TO zif_abapgit_gui_asset_manager.
+
+ METHODS preserve_css
+ IMPORTING
+ !iv_css_url TYPE string .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mt_preserve_css TYPE string_table.
+ DATA mi_asset_man TYPE REF TO zif_abapgit_gui_asset_manager.
+
+ METHODS patch_html
+ IMPORTING
+ iv_html TYPE string
+ EXPORTING
+ ev_html TYPE string
+ et_css_urls TYPE string_table
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS is_preserved
+ IMPORTING
+ !iv_css_url TYPE string
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+
+ METHODS find_head_offset
+ IMPORTING
+ iv_html TYPE string
+ RETURNING
+ VALUE(rv_head_end) TYPE i
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_utils DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS is_renderable
+ IMPORTING
+ !io_obj TYPE REF TO object
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+ CLASS-METHODS is_event_handler
+ IMPORTING
+ !io_obj TYPE REF TO object
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_html DEFINITION
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_html.
+
+ CONSTANTS c_indent_size TYPE i VALUE 2 ##NO_TEXT.
+
+ CLASS-METHODS class_constructor.
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_initial_chunk TYPE any OPTIONAL
+ RETURNING
+ VALUE(ri_instance) TYPE REF TO zif_abapgit_html.
+
+ CLASS-METHODS icon
+ IMPORTING
+ !iv_name TYPE string
+ !iv_hint TYPE string OPTIONAL
+ !iv_class TYPE string OPTIONAL
+ !iv_onclick TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_str) TYPE string.
+
+ CLASS-METHODS checkbox
+ IMPORTING
+ iv_id TYPE string OPTIONAL
+ iv_checked TYPE abap_bool OPTIONAL
+ RETURNING
+ VALUE(rv_html) TYPE string.
+
+ CLASS-METHODS parse_data_attr
+ IMPORTING
+ iv_str TYPE string OPTIONAL
+ RETURNING
+ VALUE(rs_data_attr) TYPE zif_abapgit_html=>ty_data_attr.
+
+ CLASS-METHODS set_debug_mode
+ IMPORTING
+ iv_mode TYPE abap_bool.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_max_indent TYPE i VALUE 200.
+
+ TYPES:
+ BEGIN OF ty_indent_context,
+ no_indent_jscss TYPE abap_bool,
+ within_style TYPE abap_bool,
+ within_js TYPE abap_bool,
+ within_textarea TYPE abap_bool,
+ within_pre TYPE abap_bool,
+ indent TYPE i,
+ indent_str TYPE string,
+ END OF ty_indent_context.
+
+ TYPES:
+ BEGIN OF ty_study_result,
+ style_open TYPE abap_bool,
+ style_close TYPE abap_bool,
+ script_open TYPE abap_bool,
+ script_close TYPE abap_bool,
+ textarea_open TYPE abap_bool,
+ textarea_close TYPE abap_bool,
+ pre_open TYPE abap_bool,
+ pre_close TYPE abap_bool,
+ tag_close TYPE abap_bool,
+ curly_close TYPE abap_bool,
+ openings TYPE i,
+ closings TYPE i,
+ singles TYPE i,
+ END OF ty_study_result.
+
+ CLASS-DATA go_single_tags_re TYPE REF TO cl_abap_regex.
+ CLASS-DATA gv_spaces TYPE string.
+ CLASS-DATA gv_debug_mode TYPE abap_bool.
+ DATA mt_buffer TYPE string_table.
+
+ METHODS indent_line
+ CHANGING
+ !cs_context TYPE ty_indent_context
+ !cv_line TYPE string.
+
+ METHODS study_line
+ IMPORTING
+ !iv_line TYPE string
+ !is_context TYPE ty_indent_context
+ RETURNING
+ VALUE(rs_result) TYPE ty_study_result.
+
+ENDCLASS.
+CLASS zcl_abapgit_html_parts DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ METHODS add_part
+ IMPORTING
+ !iv_collection TYPE string
+ !ii_part TYPE REF TO zif_abapgit_html .
+ METHODS get_parts
+ IMPORTING
+ !iv_collection TYPE string
+ RETURNING
+ VALUE(rt_parts) TYPE zif_abapgit_html=>ty_table_of .
+ METHODS get_collection_names
+ RETURNING
+ VALUE(rt_list) TYPE string_table .
+ METHODS get_collection_size
+ IMPORTING
+ !iv_collection TYPE string
+ RETURNING
+ VALUE(rv_size) TYPE i .
+ METHODS clear.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_named_collection,
+ name TYPE string,
+ pile TYPE zif_abapgit_html=>ty_table_of,
+ END OF ty_named_collection.
+ TYPES:
+ ty_named_collections TYPE STANDARD TABLE OF ty_named_collection WITH KEY name.
+
+ DATA mt_part_collections TYPE ty_named_collections.
+
+ METHODS get_collection
+ IMPORTING
+ !iv_collection TYPE string
+ !iv_create_if_missing TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rr_collection) TYPE REF TO ty_named_collection .
+
+ENDCLASS.
+CLASS zcl_abapgit_html_viewer_gui DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_html_viewer .
+
+ METHODS constructor
+ IMPORTING
+ !io_container TYPE REF TO cl_gui_container DEFAULT cl_gui_container=>screen0
+ !iv_disable_query_table TYPE abap_bool DEFAULT abap_true .
+ PROTECTED SECTION.
+
+ DATA mo_html_viewer TYPE REF TO cl_gui_html_viewer .
+
+ METHODS on_event
+ FOR EVENT sapevent OF cl_gui_html_viewer
+ IMPORTING
+ !action
+ !frame
+ !getdata
+ !postdata
+ !query_table .
+
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_ui_core_factory DEFINITION
+ CREATE PRIVATE
+ .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get_html_viewer
+ IMPORTING
+ !io_container TYPE REF TO cl_gui_container DEFAULT cl_gui_container=>screen0
+ !iv_disable_query_table TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ri_viewer) TYPE REF TO zif_abapgit_html_viewer .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gi_html_viewer TYPE REF TO zif_abapgit_html_viewer .
+ENDCLASS.
+CLASS zcl_abapgit_flow_exit DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_flow_exit .
+
+ CLASS-METHODS get_instance
+ RETURNING
+ VALUE(ri_exit) TYPE REF TO zif_abapgit_flow_exit.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gi_global_exit TYPE REF TO zif_abapgit_flow_exit.
+ CLASS-DATA gi_exit TYPE REF TO zif_abapgit_flow_exit.
+ENDCLASS.
+CLASS zcl_abapgit_flow_git DEFINITION.
+ PUBLIC SECTION.
+* various git related methods
+
+ CLASS-METHODS find_changes_in_git
+ IMPORTING
+ iv_url TYPE string
+ io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ iv_package TYPE devclass
+ it_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
+ EXPORTING
+ et_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
+ CHANGING
+ ct_features TYPE zif_abapgit_flow_logic=>ty_features
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS find_up_to_date
+ IMPORTING
+ it_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
+ it_objects TYPE zif_abapgit_definitions=>ty_objects_tt
+ CHANGING
+ ct_features TYPE zif_abapgit_flow_logic=>ty_features
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+
+ CLASS-METHODS map_files_to_objects
+ IMPORTING
+ it_files TYPE zif_abapgit_flow_logic=>ty_path_name_tt
+ io_dot TYPE REF TO zcl_abapgit_dot_abapgit
+ iv_package TYPE devclass
+ RETURNING
+ VALUE(rt_changed_objects) TYPE zif_abapgit_definitions=>ty_items_ts
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_flow_logic DEFINITION.
+ PUBLIC SECTION.
+ CLASS-METHODS get
+ RETURNING
+ VALUE(rs_information) TYPE zif_abapgit_flow_logic=>ty_information
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS consolidate
+ IMPORTING
+ ii_online TYPE REF TO zif_abapgit_repo_online
+ RETURNING
+ VALUE(rs_consolidate) TYPE zif_abapgit_flow_logic=>ty_consolidate
+ RAISING
+ zcx_abapgit_exception.
+
+ TYPES ty_repos_tt TYPE STANDARD TABLE OF REF TO zif_abapgit_repo_online WITH DEFAULT KEY.
+
+ CLASS-METHODS list_repos
+ IMPORTING
+ iv_favorites_only TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(rt_repos) TYPE ty_repos_tt
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES: BEGIN OF ty_transport,
+ trkorr TYPE trkorr,
+ title TYPE string,
+ object TYPE e071-object,
+ obj_name TYPE e071-obj_name,
+ devclass TYPE tadir-devclass,
+ END OF ty_transport.
+
+ TYPES ty_transports_tt TYPE STANDARD TABLE OF ty_transport WITH DEFAULT KEY.
+
+ TYPES ty_trkorr_tt TYPE STANDARD TABLE OF trkorr WITH DEFAULT KEY.
+
+ CLASS-METHODS consolidate_files
+ IMPORTING
+ ii_online TYPE REF TO zif_abapgit_repo_online
+ CHANGING
+ cs_information TYPE zif_abapgit_flow_logic=>ty_consolidate
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS check_files
+ IMPORTING
+ it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ it_features TYPE zif_abapgit_flow_logic=>ty_features
+ CHANGING
+ ct_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
+ ct_missing_remote TYPE zif_abapgit_flow_logic=>ty_consolidate-missing_remote
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS build_repo_data
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(rs_data) TYPE zif_abapgit_flow_logic=>ty_feature-repo.
+
+ CLASS-METHODS try_matching_transports
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ it_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
+ it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ CHANGING
+ ct_features TYPE zif_abapgit_flow_logic=>ty_features
+ ct_transports TYPE ty_transports_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS errors_from_transports
+ IMPORTING
+ it_all_transports TYPE ty_transports_tt
+ CHANGING
+ cs_information TYPE zif_abapgit_flow_logic=>ty_information.
+
+ CLASS-METHODS add_objects_and_files_from_tr
+ IMPORTING
+ iv_trkorr TYPE trkorr
+ it_transports TYPE ty_transports_tt
+ it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ it_main_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
+ CHANGING
+ cs_feature TYPE zif_abapgit_flow_logic=>ty_feature
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS find_prs
+ IMPORTING
+ iv_url TYPE string
+ CHANGING
+ ct_features TYPE zif_abapgit_flow_logic=>ty_features
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS add_local_status
+ IMPORTING
+ it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ CHANGING
+ ct_features TYPE zif_abapgit_flow_logic=>ty_features
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS relevant_transports_via_devc
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ it_transports TYPE ty_transports_tt
+ RETURNING
+ VALUE(rt_transports) TYPE ty_trkorr_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS find_open_transports
+ RETURNING
+ VALUE(rt_transports) TYPE ty_transports_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS serialize_filtered
+ IMPORTING
+ it_relevant_transports TYPE ty_trkorr_tt
+ ii_repo TYPE REF TO zif_abapgit_repo
+ it_all_transports TYPE ty_transports_tt
+ it_features TYPE zif_abapgit_flow_logic=>ty_features
+ RETURNING
+ VALUE(rt_local) TYPE zif_abapgit_definitions=>ty_files_item_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_flow_page_utils DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS render_table
+ IMPORTING
+ !it_files TYPE zif_abapgit_flow_logic=>ty_path_name_tt
+ !it_transport_duplicates TYPE zif_abapgit_flow_logic=>ty_transport_duplicates_tt OPTIONAL
+ !is_user_settings TYPE zif_abapgit_persist_user=>ty_flow_settings OPTIONAL
+ !iv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS call_diff
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_exception_viewer DEFINITION
+ CREATE PUBLIC.
+ PUBLIC SECTION.
+ METHODS:
+ constructor
+ IMPORTING
+ ix_error TYPE REF TO zcx_abapgit_exception,
+
+ goto_source
+ RAISING
+ zcx_abapgit_exception,
+
+ goto_message
+ RAISING
+ zcx_abapgit_exception,
+
+ show_callstack
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA:
+ mx_error TYPE REF TO zcx_abapgit_exception,
+ mt_callstack TYPE abap_callstack.
+
+ METHODS:
+ build_top_of_list
+ IMPORTING
+ is_top_of_stack TYPE abap_callstack_line
+ RETURNING
+ VALUE(ro_form) TYPE REF TO cl_salv_form_element,
+
+ add_row
+ IMPORTING
+ io_grid TYPE REF TO cl_salv_form_layout_grid
+ iv_col_1 TYPE csequence
+ iv_col_2 TYPE csequence,
+
+ on_double_click FOR EVENT double_click OF cl_salv_events_table
+ IMPORTING
+ row column,
+
+ set_text
+ IMPORTING
+ io_columns TYPE REF TO cl_salv_columns_table
+ iv_column TYPE lvc_fname
+ iv_text TYPE string
+ RAISING
+ cx_static_check,
+
+ goto_source_code
+ IMPORTING
+ is_callstack TYPE abap_callstack_line
+ RAISING
+ zcx_abapgit_exception,
+
+ extract_classname
+ IMPORTING
+ iv_mainprogram TYPE abap_callstack_line-mainprogram
+ RETURNING
+ VALUE(rv_classname) TYPE tadir-obj_name,
+
+ get_top_of_callstack
+ RETURNING
+ VALUE(rs_top_of_callstack) TYPE abap_callstack_line
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_buttons DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS new_online
+ RETURNING VALUE(rv_html_string) TYPE string.
+
+ CLASS-METHODS flow
+ RETURNING VALUE(rv_html_string) TYPE string.
+
+ CLASS-METHODS new_offline
+ RETURNING VALUE(rv_html_string) TYPE string.
+
+ CLASS-METHODS advanced
+ RETURNING VALUE(rv_html_string) TYPE string.
+
+ CLASS-METHODS help
+ RETURNING VALUE(rv_html_string) TYPE string.
+
+ CLASS-METHODS repo_list
+ RETURNING VALUE(rv_html_string) TYPE string.
+
+ CLASS-METHODS settings
+ RETURNING VALUE(rv_html_string) TYPE string.
+
+ CLASS-METHODS experimental
+ RETURNING VALUE(rv_html_string) TYPE string.
+
+ CLASS-METHODS refresh
+ RETURNING VALUE(rv_html_string) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_gui_chunk_lib DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_event_signature,
+ method TYPE string,
+ name TYPE string,
+ END OF ty_event_signature .
+
+ TYPES:
+ BEGIN OF ty_col_spec,
+ tech_name TYPE string,
+ display_name TYPE string,
+ css_class TYPE string,
+ add_tz TYPE abap_bool,
+ title TYPE string,
+ allow_order_by TYPE abap_bool,
+ END OF ty_col_spec,
+ ty_col_spec_tt TYPE STANDARD TABLE OF ty_col_spec WITH NON-UNIQUE KEY tech_name.
+
+ CLASS-METHODS class_constructor .
+ CLASS-METHODS render_error
+ IMPORTING
+ !ix_error TYPE REF TO zcx_abapgit_exception OPTIONAL
+ !iv_error TYPE string OPTIONAL
+ !iv_extra_style TYPE string OPTIONAL
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ CLASS-METHODS render_success
+ IMPORTING
+ iv_message TYPE string
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ CLASS-METHODS render_repo_top
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !iv_show_package TYPE abap_bool DEFAULT abap_true
+ !iv_show_branch TYPE abap_bool DEFAULT abap_true
+ !iv_show_commit TYPE abap_bool DEFAULT abap_true
+ !iv_show_edit TYPE abap_bool DEFAULT abap_false
+ !iv_interactive_branch TYPE abap_bool DEFAULT abap_false
+ !iv_interactive_favorite TYPE abap_bool DEFAULT abap_true
+ !io_news TYPE REF TO zcl_abapgit_repo_news OPTIONAL
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS render_item_state
+ IMPORTING
+ !iv_lstate TYPE char1
+ !iv_rstate TYPE char1
+ RETURNING
+ VALUE(rv_html) TYPE string .
+ CLASS-METHODS render_js_error_banner
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS render_news
+ IMPORTING
+ !io_news TYPE REF TO zcl_abapgit_repo_news
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS render_error_message_box
+ IMPORTING
+ !ix_error TYPE REF TO zcx_abapgit_exception
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ CLASS-METHODS render_table_header
+ IMPORTING
+ !it_col_spec TYPE ty_col_spec_tt
+ !iv_order_by TYPE string
+ !iv_order_descending TYPE abap_bool
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ CLASS-METHODS render_table_footer
+ IMPORTING
+ !iv_message TYPE string
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ CLASS-METHODS render_warning_banner
+ IMPORTING
+ !iv_text TYPE string
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ CLASS-METHODS render_infopanel
+ IMPORTING
+ !iv_div_id TYPE string
+ !iv_title TYPE string
+ !iv_hide TYPE abap_bool DEFAULT abap_true
+ !iv_hint TYPE string OPTIONAL
+ !iv_scrollable TYPE abap_bool DEFAULT abap_true
+ !io_content TYPE REF TO zif_abapgit_html
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS render_event_as_form
+ IMPORTING
+ !is_event TYPE ty_event_signature
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ CLASS-METHODS render_repo_palette
+ IMPORTING
+ iv_action TYPE string
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS render_branch_name
+ IMPORTING
+ !iv_branch TYPE string OPTIONAL
+ !iv_repo_key TYPE zif_abapgit_persistence=>ty_value OPTIONAL
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online OPTIONAL
+ !iv_interactive TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS render_repo_url
+ IMPORTING
+ iv_url TYPE zif_abapgit_persistence=>ty_repo-url
+ iv_render_remote_edit_for_key TYPE zif_abapgit_persistence=>ty_repo-key OPTIONAL
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS render_package_name
+ IMPORTING
+ !iv_package TYPE devclass
+ !iv_interactive TYPE abap_bool DEFAULT abap_true
+ !iv_suppress_title TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS render_user_name
+ IMPORTING
+ !iv_username TYPE syuname
+ !iv_interactive TYPE abap_bool DEFAULT abap_true
+ !iv_icon_only TYPE abap_bool DEFAULT abap_false
+ !iv_suppress_title TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS render_transport
+ IMPORTING
+ !iv_transport TYPE trkorr
+ !iv_obj_type TYPE zif_abapgit_definitions=>ty_repo_item-obj_type OPTIONAL
+ !iv_obj_name TYPE zif_abapgit_definitions=>ty_repo_item-obj_name OPTIONAL
+ !iv_interactive TYPE abap_bool DEFAULT abap_true
+ !iv_icon_only TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS render_sci_result
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html
+ iv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result.
+
+ CLASS-METHODS render_path
+ IMPORTING
+ !iv_path TYPE string
+ !iv_interactive TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS render_timestamp
+ IMPORTING
+ iv_timestamp TYPE timestampl
+ RETURNING
+ VALUE(rv_rendered) TYPE string.
+
+ CLASS-METHODS render_text_input
+ IMPORTING
+ iv_name TYPE string
+ iv_label TYPE string
+ iv_value TYPE string OPTIONAL
+ iv_max_length TYPE string OPTIONAL
+ iv_autofocus TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html.
+
+ CLASS-METHODS render_label_list
+ IMPORTING
+ it_labels TYPE string_table
+ io_label_colors TYPE REF TO zcl_abapgit_string_map
+ iv_clickable_action TYPE string OPTIONAL
+ iv_unlisted TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rv_html) TYPE string.
+
+ CLASS-METHODS render_help_hint
+ IMPORTING
+ iv_text_to_wrap TYPE string
+ iv_add_class TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_html) TYPE string.
+
+ CLASS-METHODS get_item_icon
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item
+ RETURNING
+ VALUE(rv_html) TYPE string.
+
+ CLASS-METHODS get_item_link
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item OPTIONAL
+ !iv_obj_type TYPE zif_abapgit_definitions=>ty_repo_item-obj_type OPTIONAL
+ !iv_obj_name TYPE zif_abapgit_definitions=>ty_repo_item-obj_name OPTIONAL
+ PREFERRED PARAMETER is_item
+ RETURNING
+ VALUE(rv_html) TYPE string.
+
+ PROTECTED SECTION.
+
+ CLASS-METHODS render_repo_top_commit_hash
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+
+ CLASS-DATA gv_time_zone TYPE timezone .
+
+ CLASS-METHODS get_t100_text
+ IMPORTING
+ !iv_msgid TYPE scx_t100key-msgid
+ !iv_msgno TYPE scx_t100key-msgno
+ RETURNING
+ VALUE(rv_text) TYPE string .
+ CLASS-METHODS normalize_program_name
+ IMPORTING
+ !iv_program_name TYPE sy-repid
+ RETURNING
+ VALUE(rv_normalized_program_name) TYPE string .
+
+ CLASS-METHODS shorten_repo_url
+ IMPORTING
+ iv_full_url TYPE string
+ iv_max_length TYPE i DEFAULT 60
+ RETURNING
+ VALUE(rv_shortened) TYPE string.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_component DEFINITION
+ ABSTRACT
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_html_parts,
+ scripts TYPE string VALUE 'scripts',
+ hidden_forms TYPE string VALUE 'hidden_forms',
+ END OF c_html_parts.
+
+ PROTECTED SECTION.
+
+ METHODS register_deferred_script
+ IMPORTING
+ ii_part TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+ METHODS gui_services
+ RETURNING
+ VALUE(ri_gui_services) TYPE REF TO zif_abapgit_gui_services
+ RAISING
+ zcx_abapgit_exception.
+ METHODS register_handlers
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+ DATA mi_gui_services TYPE REF TO zif_abapgit_gui_services.
+
+ METHODS register_event_handler
+ IMPORTING
+ ii_event_handler TYPE REF TO zif_abapgit_gui_event_handler OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+ METHODS register_hotkeys
+ IMPORTING
+ ii_hotkey_provider TYPE REF TO zif_abapgit_gui_hotkeys OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_template DEFINITION
+ FINAL
+ INHERITING FROM zcl_abapgit_gui_component
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES:
+ zif_abapgit_gui_page_title,
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_hotkeys,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable,
+ " TODO: remove table interface if not used on the page
+ zif_abapgit_html_table.
+
+ CLASS-METHODS create
+ " TODO: page parameters, e.g. ref to repo
+* IMPORTING
+* ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+* IMPORTING
+* ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_action,
+ " TODO: List of in-page actions
+ refresh TYPE string VALUE 'refresh',
+ END OF c_action.
+
+ CONSTANTS c_title TYPE string VALUE 'Page Template'. " TODO: define page title
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_flow DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler .
+ INTERFACES zif_abapgit_gui_renderable .
+ INTERFACES zif_abapgit_gui_menu_provider .
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_action,
+ refresh TYPE string VALUE 'refresh',
+ consolidate TYPE string VALUE 'consolidate',
+ pull TYPE string VALUE 'pull',
+ stage_and_commit TYPE string VALUE 'stage_and_commit',
+ only_my_transports TYPE string VALUE 'only_my_transports',
+ hide_full_matches TYPE string VALUE 'hide_full_matches',
+ hide_matching_files TYPE string VALUE 'hide_matching_files',
+ hide_conflicts TYPE string VALUE 'hide_conflicts',
+ END OF c_action .
+ DATA ms_information TYPE zif_abapgit_flow_logic=>ty_information .
+ DATA ms_user_settings TYPE zif_abapgit_persist_user=>ty_flow_settings.
+
+ METHODS refresh
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_branch
+ IMPORTING
+ !iv_branch TYPE string
+ !iv_key TYPE zif_abapgit_persistence=>ty_value
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS render_toolbar
+ IMPORTING
+ !iv_index TYPE i
+ !is_feature TYPE zif_abapgit_flow_logic=>ty_feature
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS render_info
+ IMPORTING
+ !is_feature TYPE zif_abapgit_flow_logic=>ty_feature
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS call_stage_commit
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS call_pull
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS call_consolidate
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_user_settings
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS skip_show
+ IMPORTING
+ is_feature TYPE zif_abapgit_flow_logic=>ty_feature
+ RETURNING
+ VALUE(rv_skip) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_flowcons DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler .
+ INTERFACES zif_abapgit_gui_renderable .
+ INTERFACES zif_abapgit_gui_menu_provider .
+
+ CLASS-METHODS create
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo_online
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS constructor
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo_online
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_action,
+ refresh TYPE string VALUE 'refresh',
+ stage_missing_remote TYPE string VALUE 'stage_missing_remote',
+ stage_only_remote TYPE string VALUE 'stage_only_remote',
+ END OF c_action .
+
+ DATA mo_repo TYPE REF TO zif_abapgit_repo_online.
+ DATA ms_consolidate TYPE zif_abapgit_flow_logic=>ty_consolidate.
+
+ METHODS stage_missing_remote
+ RAISING zcx_abapgit_exception.
+
+ METHODS stage_only_remote
+ RAISING zcx_abapgit_exception.
+
+ METHODS push
+ IMPORTING
+ io_stage TYPE REF TO zcl_abapgit_stage
+ iv_sha1 TYPE zif_abapgit_git_definitions=>ty_sha1
+ iv_branch_name TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_gui_in_page_modal DEFINITION
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_child TYPE REF TO zif_abapgit_gui_renderable
+ !iv_width TYPE i OPTIONAL
+ !iv_height TYPE i OPTIONAL
+ RETURNING
+ VALUE(ro_wrap) TYPE REF TO zcl_abapgit_gui_in_page_modal
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ IMPORTING
+ !ii_child TYPE REF TO zif_abapgit_gui_renderable
+ !iv_width TYPE i OPTIONAL
+ !iv_height TYPE i OPTIONAL.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mi_child TYPE REF TO zif_abapgit_gui_renderable.
+
+ DATA:
+ BEGIN OF ms_attrs,
+ width TYPE i,
+ height TYPE i,
+ END OF ms_attrs.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_menus DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS advanced
+ RETURNING
+ VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar.
+
+ CLASS-METHODS help
+ RETURNING
+ VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar.
+
+ CLASS-METHODS back
+ RETURNING
+ VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar.
+
+ CLASS-METHODS settings
+ IMPORTING
+ !iv_act TYPE string
+ RETURNING
+ VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar.
+
+ CLASS-METHODS repo_settings
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !iv_act TYPE string
+ RETURNING
+ VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar.
+
+ CLASS-METHODS experimental
+ IMPORTING
+ io_menu TYPE REF TO zcl_abapgit_html_toolbar.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page DEFINITION ABSTRACT
+ INHERITING FROM zcl_abapgit_gui_component
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_gui_modal,
+ zif_abapgit_gui_renderable,
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_error_handler.
+
+ TYPES:
+ BEGIN OF ty_control,
+ page_layout TYPE string,
+ page_title TYPE string,
+ page_menu TYPE REF TO zcl_abapgit_html_toolbar,
+ page_menu_provider TYPE REF TO zif_abapgit_gui_menu_provider,
+ page_title_provider TYPE REF TO zif_abapgit_gui_page_title,
+ extra_css_url TYPE string,
+ extra_js_url TYPE string,
+ show_as_modal TYPE abap_bool,
+ END OF ty_control .
+
+ METHODS constructor RAISING zcx_abapgit_exception.
+
+ CONSTANTS:
+ BEGIN OF c_page_layout,
+ centered TYPE string VALUE `centered`,
+ full_width TYPE string VALUE `full_width`,
+ END OF c_page_layout.
+
+ PROTECTED SECTION.
+
+ DATA ms_control TYPE ty_control .
+
+ METHODS render_content " TODO refactor, render child directly
+ ABSTRACT
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ PRIVATE SECTION.
+
+ DATA mo_settings TYPE REF TO zcl_abapgit_settings .
+ DATA mx_error TYPE REF TO zcx_abapgit_exception .
+ DATA mo_exception_viewer TYPE REF TO zcl_abapgit_exception_viewer .
+
+ METHODS render_deferred_parts
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !iv_part_category TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS html_head
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS header_stylesheet_links
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html .
+ METHODS header_script_links
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html .
+ METHODS title
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS footer
+ IMPORTING
+ !iv_time TYPE string
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_link_hints
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_browser_control_warning
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_command_palettes
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_hotkey_overview
+ RETURNING
+ VALUE(ro_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_error_message_box
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS scripts
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_version_details
+ RETURNING
+ VALUE(rv_version) TYPE string.
+ METHODS is_edge_control_warning_needed
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_hoc DEFINITION
+ INHERITING FROM zcl_abapgit_gui_page
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_child_component TYPE REF TO zif_abapgit_gui_renderable
+ !iv_page_title TYPE string OPTIONAL
+ !iv_page_layout TYPE string DEFAULT zcl_abapgit_gui_page=>c_page_layout-centered
+ !io_page_menu TYPE REF TO zcl_abapgit_html_toolbar OPTIONAL
+ !ii_page_menu_provider TYPE REF TO zif_abapgit_gui_menu_provider OPTIONAL
+ !ii_page_title_provider TYPE REF TO zif_abapgit_gui_page_title OPTIONAL
+ !iv_extra_css_url TYPE string OPTIONAL
+ !iv_extra_js_url TYPE string OPTIONAL
+ !iv_show_as_modal TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_page_wrap) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_child
+ RETURNING
+ VALUE(ri_child) TYPE REF TO zif_abapgit_gui_renderable.
+ METHODS constructor
+ IMPORTING
+ !ii_child_component TYPE REF TO zif_abapgit_gui_renderable
+ !is_control TYPE zcl_abapgit_gui_page=>ty_control
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+
+ METHODS render_content
+ REDEFINITION.
+ PRIVATE SECTION.
+
+ DATA mi_child TYPE REF TO zif_abapgit_gui_renderable .
+
+ METHODS detect_modal
+ RETURNING
+ VALUE(rv_is_modal) TYPE abap_bool.
+
+ METHODS detect_menu_provider
+ RETURNING
+ VALUE(ri_ref) TYPE REF TO zif_abapgit_gui_menu_provider.
+
+ METHODS detect_title_provider
+ RETURNING
+ VALUE(ri_ref) TYPE REF TO zif_abapgit_gui_page_title.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_picklist DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+ INTERFACES zif_abapgit_gui_page_title.
+
+ METHODS constructor
+ IMPORTING
+ !it_list TYPE STANDARD TABLE
+ !iv_id TYPE string OPTIONAL
+ !iv_in_page TYPE abap_bool DEFAULT abap_false
+ !iv_title TYPE string DEFAULT 'Choose from list'
+ !iv_attr_name TYPE abap_compname OPTIONAL
+ !ii_item_renderer TYPE REF TO zif_abapgit_gui_render_item OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_result_idx
+ RETURNING
+ VALUE(rv_index) TYPE i.
+ METHODS get_result_item
+ CHANGING
+ !cs_selected TYPE any.
+ METHODS was_cancelled
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+ METHODS is_fulfilled
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+ METHODS id
+ RETURNING
+ VALUE(rv_id) TYPE string.
+ METHODS is_in_page
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+ METHODS set_id
+ IMPORTING
+ iv_id TYPE string
+ RETURNING
+ VALUE(ro_me) TYPE REF TO zcl_abapgit_gui_picklist.
+ METHODS set_in_page
+ IMPORTING
+ iv_in_page TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ro_me) TYPE REF TO zcl_abapgit_gui_picklist.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ back TYPE string VALUE 'back',
+ choose TYPE string VALUE 'choose',
+ END OF c_event.
+
+ CONSTANTS c_radio_name TYPE string VALUE 'radio'.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+ DATA mr_list TYPE REF TO data.
+ DATA mv_selected TYPE i.
+ DATA mv_cancelled TYPE abap_bool.
+ DATA mv_fulfilled TYPE abap_bool.
+ DATA mv_attr_name TYPE abap_compname.
+ DATA mi_item_renderer TYPE REF TO zif_abapgit_gui_render_item.
+ DATA mv_in_page TYPE abap_bool.
+ DATA mv_id TYPE string.
+ DATA mv_title TYPE string.
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form
+ RAISING
+ zcx_abapgit_exception.
+ METHODS return_state
+ RETURNING
+ VALUE(rv_state) TYPE zif_abapgit_gui_event_handler=>ty_handling_result-state.
+
+ENDCLASS.
+CLASS zcl_abapgit_html_action_utils DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS jump_encode
+ IMPORTING
+ !iv_obj_type TYPE tadir-object
+ !iv_obj_name TYPE tadir-obj_name
+ !iv_filename TYPE string OPTIONAL
+ RETURNING
+ VALUE(rv_string) TYPE string .
+ CLASS-METHODS dir_encode
+ IMPORTING
+ !iv_path TYPE string
+ RETURNING
+ VALUE(rv_string) TYPE string .
+ CLASS-METHODS file_encode
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !ig_file TYPE any
+ !iv_extra TYPE clike OPTIONAL
+ RETURNING
+ VALUE(rv_string) TYPE string .
+ CLASS-METHODS obj_encode
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !ig_object TYPE any
+ RETURNING
+ VALUE(rv_string) TYPE string .
+ CLASS-METHODS dbkey_encode
+ IMPORTING
+ !is_key TYPE zif_abapgit_persistence=>ty_content
+ RETURNING
+ VALUE(rv_string) TYPE string .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES: BEGIN OF ty_name_value,
+ name TYPE string,
+ value TYPE string,
+ END OF ty_name_value.
+ TYPES ty_name_value_tt TYPE STANDARD TABLE OF ty_name_value WITH DEFAULT KEY.
+
+ CLASS-METHODS add_field
+ IMPORTING
+ !iv_name TYPE string
+ !ig_field TYPE any
+ CHANGING
+ !ct_field TYPE ty_name_value_tt .
+
+ CLASS-METHODS fields_to_string
+ IMPORTING
+ !it_fields TYPE ty_name_value_tt
+ RETURNING
+ VALUE(rv_string) TYPE string.
+ENDCLASS.
+CLASS zcl_abapgit_html_form DEFINITION
+ FINAL
+ INHERITING FROM zcl_abapgit_gui_component
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_html_form .
+ INTERFACES zif_abapgit_gui_hotkeys .
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_form_id TYPE csequence OPTIONAL
+ !iv_help_page TYPE csequence OPTIONAL
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form .
+ METHODS render
+ IMPORTING
+ !iv_form_class TYPE csequence DEFAULT 'dialog-form'
+ !io_values TYPE REF TO zcl_abapgit_string_map
+ !io_validation_log TYPE REF TO zcl_abapgit_string_map OPTIONAL
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS command
+ IMPORTING
+ !iv_label TYPE csequence
+ !iv_action TYPE csequence
+ !iv_cmd_type TYPE i DEFAULT zif_abapgit_html_form=>c_cmd_type-input
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS text
+ IMPORTING
+ !iv_label TYPE csequence
+ !iv_name TYPE csequence
+ !iv_hint TYPE csequence OPTIONAL
+ !iv_required TYPE abap_bool DEFAULT abap_false
+ !iv_upper_case TYPE abap_bool DEFAULT abap_false
+ !iv_readonly TYPE abap_bool DEFAULT abap_false
+ !iv_password TYPE abap_bool DEFAULT abap_false
+ !iv_condense TYPE abap_bool OPTIONAL
+ !iv_placeholder TYPE csequence OPTIONAL
+ !iv_side_action TYPE csequence OPTIONAL
+ !iv_min TYPE i DEFAULT cl_abap_math=>min_int4
+ !iv_max TYPE i DEFAULT cl_abap_math=>max_int4
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS textarea
+ IMPORTING
+ !iv_label TYPE csequence
+ !iv_name TYPE csequence
+ !iv_hint TYPE csequence OPTIONAL
+ !iv_required TYPE abap_bool DEFAULT abap_false
+ !iv_readonly TYPE abap_bool DEFAULT abap_false
+ !iv_placeholder TYPE csequence OPTIONAL
+ !iv_rows TYPE i OPTIONAL
+ !iv_cols TYPE i OPTIONAL
+ !iv_upper_case TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS number
+ IMPORTING
+ !iv_label TYPE csequence
+ !iv_name TYPE csequence
+ !iv_hint TYPE csequence OPTIONAL
+ !iv_required TYPE abap_bool DEFAULT abap_false
+ !iv_readonly TYPE abap_bool DEFAULT abap_false
+ !iv_min TYPE i DEFAULT cl_abap_math=>min_int4
+ !iv_max TYPE i DEFAULT cl_abap_math=>max_int4
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS checkbox
+ IMPORTING
+ !iv_label TYPE csequence
+ !iv_name TYPE csequence
+ !iv_hint TYPE csequence OPTIONAL
+ !iv_readonly TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS radio
+ IMPORTING
+ !iv_label TYPE csequence
+ !iv_name TYPE csequence
+ !iv_default_value TYPE csequence OPTIONAL
+ !iv_hint TYPE csequence OPTIONAL
+ !iv_condense TYPE abap_bool DEFAULT abap_false
+ !iv_action TYPE csequence OPTIONAL
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS option
+ IMPORTING
+ !iv_label TYPE csequence
+ !iv_value TYPE csequence
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS table
+ IMPORTING
+ !iv_label TYPE csequence
+ !iv_name TYPE csequence
+ !iv_hint TYPE csequence OPTIONAL
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS column
+ IMPORTING
+ !iv_label TYPE csequence
+ !iv_width TYPE csequence OPTIONAL
+ !iv_readonly TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS start_group
+ IMPORTING
+ !iv_label TYPE csequence
+ !iv_name TYPE csequence
+ !iv_hint TYPE csequence OPTIONAL
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS hidden
+ IMPORTING
+ !iv_name TYPE csequence
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_form .
+ METHODS get_fields
+ RETURNING
+ VALUE(rt_fields) TYPE zif_abapgit_html_form=>ty_fields .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_attr,
+ value TYPE string,
+ error TYPE string,
+ hint TYPE string,
+ readonly TYPE string,
+ placeholder TYPE string,
+ required TYPE string,
+ autofocus TYPE string,
+ END OF ty_attr .
+
+ DATA mv_webgui TYPE abap_bool.
+ DATA mt_fields TYPE zif_abapgit_html_form=>ty_fields .
+ DATA:
+ mt_commands TYPE STANDARD TABLE OF zif_abapgit_html_form=>ty_command .
+ DATA mv_form_id TYPE string .
+ DATA mv_help_page TYPE string .
+
+ METHODS render_field
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !io_values TYPE REF TO zcl_abapgit_string_map
+ !io_validation_log TYPE REF TO zcl_abapgit_string_map
+ !is_field TYPE zif_abapgit_html_form=>ty_field
+ !iv_autofocus TYPE abap_bool .
+ METHODS render_field_text
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_field TYPE zif_abapgit_html_form=>ty_field
+ !is_attr TYPE ty_attr .
+ METHODS render_field_textarea
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_field TYPE zif_abapgit_html_form=>ty_field
+ !is_attr TYPE ty_attr .
+ METHODS render_field_checkbox
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_field TYPE zif_abapgit_html_form=>ty_field
+ !is_attr TYPE ty_attr .
+ METHODS render_field_radio
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_field TYPE zif_abapgit_html_form=>ty_field
+ !is_attr TYPE ty_attr .
+ METHODS render_field_table
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_field TYPE zif_abapgit_html_form=>ty_field
+ !is_attr TYPE ty_attr
+ !io_values TYPE REF TO zcl_abapgit_string_map .
+ METHODS render_command
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_cmd TYPE zif_abapgit_html_form=>ty_command .
+ METHODS render_command_link
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_cmd TYPE zif_abapgit_html_form=>ty_command .
+ METHODS render_field_hidden
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_field TYPE zif_abapgit_html_form=>ty_field
+ !is_attr TYPE ty_attr .
+ENDCLASS.
+CLASS zcl_abapgit_html_form_utils DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create
+ IMPORTING
+ !io_form TYPE REF TO zcl_abapgit_html_form
+ RETURNING
+ VALUE(ro_form_util) TYPE REF TO zcl_abapgit_html_form_utils .
+ CLASS-METHODS is_dirty
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ !io_compare_with TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(rv_dirty) TYPE abap_bool .
+
+ METHODS constructor
+ IMPORTING
+ !io_form TYPE REF TO zcl_abapgit_html_form .
+ METHODS normalize
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_form_data) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+ METHODS validate
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_empty
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(rv_empty) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS set_data
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map .
+ METHODS exit
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ !io_compare_with TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(rv_state) TYPE i
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form .
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
+
+ENDCLASS.
+CLASS zcl_abapgit_html_table DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_renderer TYPE REF TO zif_abapgit_html_table OPTIONAL " Can be passed to renderer
+ !is_initial_sorting_state TYPE zif_abapgit_html_table=>ty_sorting_state OPTIONAL
+ PREFERRED PARAMETER ii_renderer
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_html_table .
+ " maybe also th css_class
+ METHODS define_column
+ IMPORTING
+ !iv_column_id TYPE string
+ !iv_column_title TYPE string OPTIONAL
+ !iv_from_field TYPE abap_compname OPTIONAL
+ !iv_sortable TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_table .
+ METHODS define_column_group
+ IMPORTING
+ !iv_group_id TYPE string OPTIONAL " not mandatory, but can be used for CSS (TODO data-gid)
+ !iv_group_title TYPE string OPTIONAL " can be empty !
+ PREFERRED PARAMETER iv_group_title
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_table
+ RAISING
+ zcx_abapgit_exception .
+ " Maybe also data_provider
+ " TODO record Limiter
+ METHODS render
+ IMPORTING
+ !ii_renderer TYPE REF TO zif_abapgit_html_table OPTIONAL
+ !it_data TYPE ANY TABLE
+ !iv_id TYPE csequence OPTIONAL
+ !iv_css_class TYPE csequence OPTIONAL
+ !iv_with_cids TYPE abap_bool DEFAULT abap_false
+ !is_sorting_state TYPE zif_abapgit_html_table=>ty_sorting_state OPTIONAL
+ !iv_wrap_in_div TYPE string OPTIONAL " div class name
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+
+ " Sorting utils
+ CLASS-METHODS detect_sorting_request
+ IMPORTING
+ iv_event TYPE string
+ RETURNING
+ VALUE(rs_sorting_request) TYPE zif_abapgit_html_table=>ty_sorting_state.
+ METHODS process_sorting_request
+ IMPORTING
+ iv_event TYPE string
+ RETURNING
+ VALUE(rv_processed) TYPE abap_bool.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_sort_by_event_prefix TYPE string VALUE `sort_by:`.
+ CONSTANTS c_sort_by_event_regex TYPE string VALUE `^sort_by:\w+:(asc|dsc)$`.
+
+ TYPES:
+ BEGIN OF ty_column,
+ column_id TYPE string,
+ column_title TYPE string,
+ from_field TYPE abap_compname,
+ sortable TYPE abap_bool,
+ is_group TYPE abap_bool,
+ group_span TYPE i,
+ END OF ty_column,
+ ty_columns TYPE STANDARD TABLE OF ty_column WITH KEY column_id.
+
+ DATA mi_renderer TYPE REF TO zif_abapgit_html_table.
+ DATA mt_columns TYPE ty_columns.
+ DATA mi_html TYPE REF TO zif_abapgit_html.
+ DATA mv_with_cids TYPE abap_bool.
+ DATA mv_table_id TYPE string.
+ DATA ms_sorting_state TYPE zif_abapgit_html_table=>ty_sorting_state.
+ DATA mr_last_grp TYPE REF TO ty_column.
+
+ " potentially receive from outside
+ DATA mv_sort_span_class TYPE string VALUE `sort-arrow`.
+ DATA mv_sort_active_class TYPE string VALUE `sort-active`.
+
+ METHODS render_thead
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS render_tbody
+ IMPORTING
+ it_data TYPE ANY TABLE
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS render_row
+ IMPORTING
+ iv_row_index TYPE i
+ is_row TYPE any
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS render_column_title
+ IMPORTING
+ is_col TYPE ty_column
+ RETURNING
+ VALUE(rv_text) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS cid_attr
+ IMPORTING
+ iv_column_id TYPE string
+ RETURNING
+ VALUE(rs_data_attr) TYPE zif_abapgit_html=>ty_data_attr.
+
+ CLASS-METHODS gid_attr
+ IMPORTING
+ iv_column_id TYPE string
+ RETURNING
+ VALUE(rs_data_attr) TYPE zif_abapgit_html=>ty_data_attr.
+
+ METHODS apply_sorting
+ CHANGING
+ ct_data TYPE STANDARD TABLE.
+
+ENDCLASS.
+CLASS zcl_abapgit_html_toolbar DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_id TYPE string OPTIONAL
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_html_toolbar.
+ METHODS constructor
+ IMPORTING
+ !iv_id TYPE string OPTIONAL .
+ METHODS add
+ IMPORTING
+ !iv_txt TYPE string
+ !io_sub TYPE REF TO zcl_abapgit_html_toolbar OPTIONAL
+ !iv_typ TYPE c DEFAULT zif_abapgit_html=>c_action_type-sapevent
+ !iv_act TYPE string OPTIONAL
+ !iv_ico TYPE string OPTIONAL
+ !iv_cur TYPE abap_bool OPTIONAL
+ !iv_opt TYPE c OPTIONAL
+ !iv_chk TYPE abap_bool DEFAULT abap_undefined
+ !iv_aux TYPE string OPTIONAL
+ !iv_id TYPE string OPTIONAL
+ !iv_title TYPE string OPTIONAL
+ !iv_class TYPE string OPTIONAL
+ !iv_hotkey TYPE string OPTIONAL
+ !iv_li_class TYPE string OPTIONAL
+ RETURNING
+ VALUE(ro_self) TYPE REF TO zcl_abapgit_html_toolbar .
+ METHODS count_items
+ RETURNING
+ VALUE(rv_count) TYPE i .
+ METHODS render
+ IMPORTING
+ !iv_right TYPE abap_bool OPTIONAL
+ !iv_sort TYPE abap_bool OPTIONAL
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS render_as_droplist
+ IMPORTING
+ !iv_label TYPE string
+ !iv_right TYPE abap_bool OPTIONAL
+ !iv_sort TYPE abap_bool OPTIONAL
+ !iv_corner TYPE abap_bool OPTIONAL
+ !iv_action TYPE string OPTIONAL
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS get_hotkeys
+ IMPORTING
+ iv_component_name TYPE string OPTIONAL
+ RETURNING
+ VALUE(rt_hotkeys) TYPE zif_abapgit_gui_hotkeys=>ty_hotkeys_with_descr.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_item,
+ txt TYPE string,
+ act TYPE string,
+ ico TYPE string,
+ sub TYPE REF TO zcl_abapgit_html_toolbar,
+ opt TYPE c LENGTH 1,
+ typ TYPE c LENGTH 1,
+ cur TYPE abap_bool,
+ chk TYPE abap_bool,
+ aux TYPE string,
+ id TYPE string,
+ title TYPE string,
+ class TYPE string,
+ li_class TYPE string,
+ hotkey TYPE string,
+ END OF ty_item .
+ TYPES:
+ ty_items TYPE STANDARD TABLE OF ty_item .
+
+ DATA mt_items TYPE ty_items .
+ DATA mv_id TYPE string .
+
+ METHODS render_items
+ IMPORTING
+ !iv_sort TYPE abap_bool OPTIONAL
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ENDCLASS.
+CLASS zcl_abapgit_log_viewer DEFINITION
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS show_log
+ IMPORTING
+ !ii_log TYPE REF TO zif_abapgit_log .
+ CLASS-METHODS to_html
+ IMPORTING
+ !ii_log TYPE REF TO zif_abapgit_log
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ CLASS-METHODS write_log
+ IMPORTING
+ !ii_log TYPE REF TO zif_abapgit_log .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_log_out,
+ type TYPE icon_d,
+ msg TYPE string,
+ obj_type TYPE trobjtype,
+ obj_name TYPE sobj_name,
+ exception TYPE REF TO cx_root,
+ longtext TYPE icon_d,
+ t100 TYPE icon_d,
+ source TYPE icon_d,
+ callstack TYPE icon_d,
+ cell_type TYPE salv_t_int4_column,
+ id TYPE sy-msgid,
+ number TYPE sy-msgno,
+ END OF ty_log_out.
+ TYPES:
+ ty_log_outs TYPE STANDARD TABLE OF ty_log_out
+ WITH NON-UNIQUE DEFAULT KEY.
+
+ CLASS-METHODS:
+ prepare_log_for_display
+ IMPORTING
+ ii_log TYPE REF TO zif_abapgit_log
+ RETURNING
+ VALUE(rt_log_out) TYPE ty_log_outs,
+
+ show_longtext
+ IMPORTING
+ is_log TYPE ty_log_out
+ RAISING
+ zcx_abapgit_exception,
+
+ goto_source
+ IMPORTING
+ is_log TYPE ty_log_out
+ RAISING
+ zcx_abapgit_exception,
+
+ goto_callstack
+ IMPORTING
+ is_log TYPE ty_log_out
+ RAISING
+ zcx_abapgit_exception,
+
+ goto_t100_message
+ IMPORTING
+ is_log TYPE ty_log_out
+ RAISING
+ zcx_abapgit_exception,
+
+ on_link_click FOR EVENT link_click OF cl_salv_events_table
+ IMPORTING row column,
+
+ dispatch
+ IMPORTING
+ is_log TYPE ty_log_out
+ iv_column TYPE salv_de_column
+ RAISING
+ zcx_abapgit_exception,
+
+ calculate_cell_type,
+
+ get_exception_viewer
+ IMPORTING
+ is_log TYPE ty_log_out
+ RETURNING
+ VALUE(ro_exception_viewer) TYPE REF TO zcl_abapgit_exception_viewer.
+
+ CLASS-DATA:
+ gt_log TYPE ty_log_outs.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_codi_base DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_html_table.
+
+ PROTECTED SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_actions,
+ rerun TYPE string VALUE 'rerun',
+ stage TYPE string VALUE 'stage',
+ commit TYPE string VALUE 'commit',
+ filter_kind TYPE string VALUE 'filter_kind',
+ apply_filter TYPE string VALUE 'apply_filter',
+ END OF c_actions .
+
+ DATA mi_repo TYPE REF TO zif_abapgit_repo.
+ DATA mt_result TYPE zif_abapgit_code_inspector=>ty_results.
+ DATA mv_summary TYPE string.
+
+ METHODS on_event
+ IMPORTING
+ ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_ci_report
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !iv_variant TYPE sci_chkv
+ !iv_success_msg TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS render_head
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !iv_variant TYPE sci_chkv
+ !iv_summary TYPE string.
+ METHODS render_detail
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !it_result TYPE zif_abapgit_code_inspector=>ty_results
+ RAISING
+ zcx_abapgit_exception.
+ METHODS render_stats
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !it_result TYPE zif_abapgit_code_inspector=>ty_results
+ RAISING
+ zcx_abapgit_exception.
+ METHODS build_base_menu
+ RETURNING
+ VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar.
+
+ PRIVATE SECTION.
+
+ CONSTANTS c_object_separator TYPE c LENGTH 1 VALUE '|'.
+ CONSTANTS c_ci_sig TYPE string VALUE 'cinav:'.
+ CONSTANTS c_limit TYPE i VALUE 500.
+ DATA mv_filter_kind TYPE string.
+ DATA ms_sorting_state TYPE zif_abapgit_html_table=>ty_sorting_state.
+
+ TYPES:
+ BEGIN OF ty_result_view,
+ kind TYPE zif_abapgit_code_inspector=>ty_result-kind,
+ obj_type TYPE zif_abapgit_code_inspector=>ty_result-objtype,
+ location TYPE string,
+ text TYPE string,
+ nav TYPE string,
+ author TYPE c LENGTH 12,
+ END OF ty_result_view,
+ ty_view_tab TYPE STANDARD TABLE OF ty_result_view WITH DEFAULT KEY.
+
+ METHODS convert_result_to_view
+ IMPORTING
+ it_result TYPE zif_abapgit_code_inspector=>ty_results
+ RETURNING
+ VALUE(rt_view) TYPE ty_view_tab.
+ METHODS explain_include
+ IMPORTING
+ !is_result TYPE zif_abapgit_code_inspector=>ty_result
+ RETURNING
+ VALUE(rv_txt) TYPE string.
+ METHODS render_limit_warning
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html.
+ METHODS build_nav_link
+ IMPORTING
+ !is_result TYPE zif_abapgit_code_inspector=>ty_result
+ RETURNING
+ VALUE(rv_link) TYPE string.
+ METHODS jump
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_item
+ !is_sub_item TYPE zif_abapgit_definitions=>ty_item
+ !iv_line_number TYPE i
+ RAISING
+ zcx_abapgit_exception.
+ METHODS apply_sorting
+ CHANGING
+ ct_view TYPE ty_view_tab.
+ METHODS apply_filter_kind
+ CHANGING
+ ct_view TYPE ty_view_tab.
+ METHODS handle_navigation
+ IMPORTING
+ iv_link TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS render_stat
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !iv_count TYPE i
+ !iv_type TYPE string
+ !iv_title TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_code_insp DEFINITION
+ INHERITING FROM zcl_abapgit_gui_page_codi_base
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES:
+ zif_abapgit_gui_page_title,
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_hotkeys,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ io_stage TYPE REF TO zcl_abapgit_stage OPTIONAL
+ iv_check_variant TYPE sci_chkv OPTIONAL
+ iv_raise_when_no_results TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ io_stage TYPE REF TO zcl_abapgit_stage OPTIONAL
+ iv_check_variant TYPE sci_chkv OPTIONAL
+ iv_raise_when_no_results TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mo_stage TYPE REF TO zcl_abapgit_stage.
+ DATA mv_check_variant TYPE sci_chkv.
+
+ METHODS:
+ run_code_inspector
+ RAISING
+ zcx_abapgit_exception,
+
+ has_inspection_errors
+ RETURNING
+ VALUE(rv_has_inspection_errors) TYPE abap_bool,
+
+ is_stage_allowed
+ RETURNING
+ VALUE(rv_is_stage_allowed) TYPE abap_bool,
+
+ ask_user_for_check_variant
+ RETURNING
+ VALUE(rv_check_variant) TYPE sci_chkv
+ RAISING
+ zcx_abapgit_exception,
+
+ determine_check_variant
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS status
+ RETURNING
+ VALUE(rv_status) TYPE zif_abapgit_definitions=>ty_sci_result.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_runit DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+ INTERFACES zif_abapgit_gui_menu_provider.
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_actions,
+ rerun TYPE string VALUE 'rerun' ##NO_TEXT,
+ END OF c_actions .
+
+ TYPES:
+ BEGIN OF ty_key,
+ obj_name TYPE tadir-obj_name,
+ obj_type TYPE tadir-object,
+ END OF ty_key,
+ ty_keys_tt TYPE STANDARD TABLE OF ty_key WITH DEFAULT KEY.
+
+ DATA mi_repo TYPE REF TO zif_abapgit_repo.
+ DATA mv_summary TYPE string.
+
+ METHODS build_tadir
+ RETURNING
+ VALUE(rt_tadir) TYPE ty_keys_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS run
+ RETURNING
+ VALUE(ro_result) TYPE REF TO object
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_text_for_method
+ IMPORTING
+ !is_method TYPE any
+ !it_indices TYPE ANY TABLE
+ !iv_program_ndx TYPE sy-tabix
+ !iv_class_ndx TYPE sy-tabix
+ !iv_method_ndx TYPE sy-tabix
+ RETURNING
+ VALUE(rv_text) TYPE string.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_syntax DEFINITION
+ INHERITING FROM zcl_abapgit_gui_page_codi_base
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES:
+ zif_abapgit_gui_page_title,
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_hotkeys,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ CONSTANTS c_variant TYPE c LENGTH 30 VALUE 'SYNTAX_CHECK'.
+
+ PRIVATE SECTION.
+
+ METHODS run_syntax_check
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_whereused DEFINITION
+ FINAL
+ INHERITING FROM zcl_abapgit_gui_component
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ INTERFACES:
+ zif_abapgit_gui_page_title,
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_hotkeys,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable,
+ zif_abapgit_html_table.
+
+ CLASS-METHODS create
+ IMPORTING
+ iv_package TYPE devclass OPTIONAL
+ ii_repo TYPE REF TO zif_abapgit_repo OPTIONAL
+ PREFERRED PARAMETER iv_package
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ iv_package TYPE devclass OPTIONAL
+ ii_repo TYPE REF TO zif_abapgit_repo OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS:
+ BEGIN OF c_action,
+ refresh TYPE string VALUE 'refresh',
+ show_used_obj TYPE string VALUE 'show_used_obj',
+ show_root_pkg TYPE string VALUE 'show_root_pkg',
+ END OF c_action.
+
+ CONSTANTS c_title TYPE string VALUE 'Where Used'.
+ DATA mv_package TYPE devclass.
+ DATA mv_ignore_subpackages TYPE abap_bool.
+ DATA mi_table TYPE REF TO zcl_abapgit_html_table.
+ DATA mv_show_used_obj TYPE abap_bool.
+ DATA mv_show_root_pkg TYPE abap_bool.
+ DATA mt_where_used TYPE zcl_abapgit_where_used_tools=>ty_dependency_tt.
+
+ METHODS init_table_component
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_filter_help_hint
+ RETURNING
+ VALUE(rv_html) TYPE string.
+ METHODS render_header
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+ METHODS run_where_used
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_db DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+ INTERFACES zif_abapgit_gui_menu_provider.
+ INTERFACES zif_abapgit_html_table.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_action,
+ delete TYPE string VALUE 'delete',
+ backup TYPE string VALUE 'backup',
+ restore TYPE string VALUE 'restore',
+ END OF c_action.
+
+ CONSTANTS c_css_url TYPE string VALUE 'css/page_db.css'.
+ CONSTANTS c_toc_filename TYPE string VALUE '#_Table_of_Content_#.txt'.
+
+ TYPES:
+ BEGIN OF ty_explanation,
+ value TYPE string,
+ extra TYPE string,
+ END OF ty_explanation.
+
+ DATA mt_methods TYPE zcl_abapgit_background=>ty_methods.
+
+ METHODS register_stylesheet
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_stats
+ IMPORTING
+ it_db_entries TYPE zif_abapgit_persistence=>ty_contents
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_table
+ IMPORTING
+ it_db_entries TYPE zif_abapgit_persistence=>ty_contents
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS do_backup_db
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS do_delete_entry
+ IMPORTING
+ !is_key TYPE zif_abapgit_persistence=>ty_content
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS do_restore_db
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS explain_content
+ IMPORTING
+ !is_data TYPE zif_abapgit_persistence=>ty_content
+ RETURNING
+ VALUE(rv_text) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS explain_content_repo
+ IMPORTING
+ !is_data TYPE zif_abapgit_persistence=>ty_content
+ RETURNING
+ VALUE(rs_expl) TYPE ty_explanation
+ RAISING
+ zcx_abapgit_exception.
+ METHODS explain_content_repo_cs
+ IMPORTING
+ !is_data TYPE zif_abapgit_persistence=>ty_content
+ RETURNING
+ VALUE(rs_expl) TYPE ty_explanation
+ RAISING
+ zcx_abapgit_exception.
+ METHODS explain_content_background
+ IMPORTING
+ !is_data TYPE zif_abapgit_persistence=>ty_content
+ RETURNING
+ VALUE(rs_expl) TYPE ty_explanation
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_db_entry DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler .
+ INTERFACES zif_abapgit_gui_renderable .
+ INTERFACES zif_abapgit_gui_page_title .
+
+ CLASS-METHODS create
+ IMPORTING
+ !is_key TYPE zif_abapgit_persistence=>ty_content
+ !iv_edit_mode TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS constructor
+ IMPORTING
+ !is_key TYPE zif_abapgit_persistence=>ty_content
+ !iv_edit_mode TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+ CONSTANTS:
+ BEGIN OF c_action,
+ update TYPE string VALUE 'update',
+ switch_mode TYPE string VALUE 'switch_mode',
+ END OF c_action .
+
+ CONSTANTS c_edit_form_id TYPE string VALUE `db_form`.
+ CONSTANTS c_css_url TYPE string VALUE 'css/page_db_entry.css'.
+
+ DATA ms_key TYPE zif_abapgit_persistence=>ty_content.
+ DATA mv_edit_mode TYPE abap_bool.
+
+ METHODS register_stylesheet
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_view
+ IMPORTING
+ iv_raw_db_value TYPE zif_abapgit_persistence=>ty_content-data_str
+ ii_html TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_edit
+ IMPORTING
+ iv_raw_db_value TYPE zif_abapgit_persistence=>ty_content-data_str
+ ii_html TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_header
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html
+ io_toolbar TYPE REF TO zcl_abapgit_html_toolbar.
+
+ METHODS build_toolbar
+ RETURNING
+ VALUE(ro_toolbar) TYPE REF TO zcl_abapgit_html_toolbar.
+
+ CLASS-METHODS render_entry_tag
+ IMPORTING
+ is_key TYPE zif_abapgit_persistence=>ty_content
+ RETURNING
+ VALUE(rv_html) TYPE string.
+
+ CLASS-METHODS dbcontent_decode
+ IMPORTING
+ io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(rs_content) TYPE zif_abapgit_persistence=>ty_content
+ RAISING
+ zcx_abapgit_exception .
+
+ CLASS-METHODS do_update
+ IMPORTING
+ is_content TYPE zif_abapgit_persistence=>ty_content
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_diff_base DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_hotkeys.
+ INTERFACES zif_abapgit_gui_menu_provider.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CONSTANTS:
+ BEGIN OF c_fstate,
+ local TYPE c LENGTH 1 VALUE 'L',
+ remote TYPE c LENGTH 1 VALUE 'R',
+ both TYPE c LENGTH 1 VALUE 'B',
+ END OF c_fstate.
+
+ METHODS constructor
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key OPTIONAL
+ !is_file TYPE zif_abapgit_git_definitions=>ty_file OPTIONAL
+ !is_object TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ !it_files TYPE zif_abapgit_definitions=>ty_stage_tt OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ DATA mi_extra TYPE REF TO zif_abapgit_gui_diff_extra.
+
+ CONSTANTS:
+ BEGIN OF c_actions,
+ toggle_unified TYPE string VALUE 'toggle_unified',
+ toggle_hide_diffs TYPE string VALUE 'toggle_hide_diffs',
+ toggle_hidden_chars TYPE string VALUE 'toggle_hidden_chars',
+ toggle_ignore_indent TYPE string VALUE 'toggle_ignore_indent',
+ toggle_ignore_comments TYPE string VALUE 'toggle_ignore_comments',
+ toggle_ignore_case TYPE string VALUE 'toggle_ignore_case',
+ refresh_prefix TYPE string VALUE 'refresh',
+ refresh_all TYPE string VALUE 'refresh_all',
+ refresh_local TYPE string VALUE 'refresh_local',
+ refresh_local_object TYPE string VALUE 'refresh_local_object',
+ END OF c_actions ,
+ BEGIN OF c_action_texts,
+ refresh_all TYPE string VALUE `Refresh All`,
+ refresh_local TYPE string VALUE `Refresh Local`,
+ END OF c_action_texts,
+ BEGIN OF c_action_titles,
+ refresh_local TYPE string VALUE `Refresh all local objects, without refreshing the remote`,
+ refresh_all TYPE string VALUE `Complete refresh of all objects, local and remote`,
+ END OF c_action_titles.
+
+ DATA mv_unified TYPE abap_bool VALUE abap_true ##NO_TEXT.
+ DATA mi_repo TYPE REF TO zif_abapgit_repo .
+ DATA mt_diff_files TYPE zif_abapgit_gui_diff=>ty_file_diffs .
+
+ CLASS-METHODS get_page_layout
+ RETURNING
+ VALUE(rv_page_layout) TYPE string.
+
+ CLASS-METHODS get_normalized_fname_with_path
+ IMPORTING
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff
+ RETURNING
+ VALUE(rv_filename) TYPE string .
+ CLASS-METHODS normalize_path
+ IMPORTING
+ !iv_path TYPE string
+ RETURNING
+ VALUE(rv_normalized) TYPE string .
+ CLASS-METHODS normalize_filename
+ IMPORTING
+ !iv_filename TYPE string
+ RETURNING
+ VALUE(rv_normalized) TYPE string .
+ METHODS add_menu_end
+ IMPORTING
+ !io_menu TYPE REF TO zcl_abapgit_html_toolbar .
+ METHODS calculate_diff
+ IMPORTING
+ !is_file TYPE zif_abapgit_git_definitions=>ty_file OPTIONAL
+ !is_object TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ !it_files TYPE zif_abapgit_definitions=>ty_stage_tt OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_files_and_status
+ IMPORTING
+ !is_file TYPE zif_abapgit_git_definitions=>ty_file
+ !is_object TYPE zif_abapgit_definitions=>ty_item
+ EXPORTING
+ et_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ et_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ et_status TYPE zif_abapgit_definitions=>ty_results_tt
+ RAISING
+ zcx_abapgit_exception.
+ METHODS add_menu_begin
+ IMPORTING
+ !io_menu TYPE REF TO zcl_abapgit_html_toolbar .
+ METHODS refresh
+ IMPORTING
+ iv_action TYPE clike
+ RAISING
+ zcx_abapgit_exception .
+ METHODS refresh_full
+ RAISING
+ zcx_abapgit_exception .
+ METHODS refresh_local
+ RAISING
+ zcx_abapgit_exception .
+ METHODS refresh_local_object
+ IMPORTING
+ iv_action TYPE clike
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_refresh
+ IMPORTING
+ iv_action TYPE string
+ RETURNING
+ VALUE(rv_is_refrseh) TYPE abap_bool.
+ METHODS modify_files_before_diff_calc
+ IMPORTING
+ it_diff_files_old TYPE zif_abapgit_gui_diff=>ty_file_diffs
+ RETURNING
+ VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_stage_tt.
+ METHODS add_view_sub_menu
+ IMPORTING
+ io_menu TYPE REF TO zcl_abapgit_html_toolbar .
+ METHODS append_diff
+ IMPORTING
+ !it_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ !it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ !is_status TYPE zif_abapgit_definitions=>ty_result
+ RAISING
+ zcx_abapgit_exception .
+
+ PRIVATE SECTION.
+ TYPES:
+ BEGIN OF ty_view,
+ hide_diffs TYPE abap_bool,
+ hidden_chars TYPE abap_bool,
+ ignore_indent TYPE abap_bool,
+ ignore_comments TYPE abap_bool,
+ ignore_case TYPE abap_bool,
+ END OF ty_view.
+ DATA mt_delayed_lines TYPE zif_abapgit_definitions=>ty_diffs_tt .
+ DATA mv_repo_key TYPE zif_abapgit_persistence=>ty_repo-key .
+ DATA mv_seed TYPE string . " Unique page id to bind JS sessionStorage
+ DATA ms_view TYPE ty_view.
+ METHODS render_table_head_non_unified
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html .
+ METHODS render_line_split_row
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !iv_fstate TYPE char1
+ !iv_new TYPE string
+ !iv_old TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_diff_head_after_state
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff .
+ METHODS render_beacon_begin_of_row
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html.
+ METHODS render_diff
+ IMPORTING
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_diff_head
+ IMPORTING
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_table_head
+ IMPORTING
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_beacon
+ IMPORTING
+ !is_diff_line TYPE zif_abapgit_definitions=>ty_diff
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS render_line_no_diffs
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_line_split
+ IMPORTING
+ !is_diff_line TYPE zif_abapgit_definitions=>ty_diff
+ !iv_filename TYPE string
+ !iv_fstate TYPE char1
+ !iv_index TYPE sy-tabix
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_line_unified
+ IMPORTING
+ !is_diff_line TYPE zif_abapgit_definitions=>ty_diff OPTIONAL
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ CLASS-METHODS is_binary
+ IMPORTING
+ !iv_d1 TYPE xstring
+ !iv_d2 TYPE xstring
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+ METHODS add_jump_sub_menu
+ IMPORTING
+ !io_menu TYPE REF TO zcl_abapgit_html_toolbar .
+ METHODS add_filter_sub_menu
+ IMPORTING
+ !io_menu TYPE REF TO zcl_abapgit_html_toolbar .
+ METHODS render_lines
+ IMPORTING
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_table_head_unified
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html .
+ METHODS render_scripts
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_file_requested
+ IMPORTING
+ it_files TYPE zif_abapgit_definitions=>ty_stage_tt
+ is_status TYPE zif_abapgit_definitions=>ty_result
+ RETURNING
+ VALUE(rv_is_file_requested) TYPE abap_bool.
+ METHODS has_diffs
+ IMPORTING
+ !it_diffs TYPE zif_abapgit_definitions=>ty_diffs_tt
+ RETURNING
+ VALUE(rv_has_diffs) TYPE abap_bool.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_diff DEFINITION
+ INHERITING FROM zcl_abapgit_gui_page_diff_base
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !is_file TYPE zif_abapgit_git_definitions=>ty_file OPTIONAL
+ !is_object TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ !it_files TYPE zif_abapgit_definitions=>ty_stage_tt OPTIONAL
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_diff_file DEFINITION
+ INHERITING FROM zcl_abapgit_gui_page_diff_base
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create
+ IMPORTING
+ iv_obj_type TYPE tadir-object
+ iv_obj_name TYPE tadir-obj_name
+ !is_local TYPE zif_abapgit_git_definitions=>ty_file
+ !is_remote TYPE zif_abapgit_git_definitions=>ty_file
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ METHODS do_diff
+ IMPORTING
+ iv_obj_type TYPE tadir-object
+ iv_obj_name TYPE tadir-obj_name
+ !is_local TYPE zif_abapgit_git_definitions=>ty_file
+ !is_remote TYPE zif_abapgit_git_definitions=>ty_file
+ RAISING
+ zcx_abapgit_exception.
+
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_patch DEFINITION
+ INHERITING FROM zcl_abapgit_gui_page_diff_base
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_diff_extra.
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !is_file TYPE zif_abapgit_git_definitions=>ty_file OPTIONAL
+ !is_object TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ !it_files TYPE zif_abapgit_definitions=>ty_stage_tt OPTIONAL
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !is_file TYPE zif_abapgit_git_definitions=>ty_file OPTIONAL
+ !is_object TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ !it_files TYPE zif_abapgit_definitions=>ty_stage_tt OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ CLASS-METHODS get_patch_data
+ IMPORTING
+ !iv_patch TYPE string
+ EXPORTING
+ !ev_filename TYPE string
+ !ev_line_index TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS:
+ zif_abapgit_gui_event_handler~on_event REDEFINITION,
+ zif_abapgit_gui_hotkeys~get_hotkey_actions REDEFINITION,
+ zif_abapgit_gui_renderable~render REDEFINITION.
+
+ PROTECTED SECTION.
+
+ METHODS:
+ add_menu_begin REDEFINITION,
+ add_menu_end REDEFINITION,
+ refresh REDEFINITION.
+
+ PRIVATE SECTION.
+
+ TYPES ty_patch_action TYPE string .
+
+ CONSTANTS:
+ BEGIN OF c_patch_actions,
+ stage TYPE string VALUE 'patch_stage',
+ END OF c_patch_actions .
+ CONSTANTS:
+ BEGIN OF c_patch_action,
+ add TYPE ty_patch_action VALUE 'add',
+ remove TYPE ty_patch_action VALUE 'remove',
+ END OF c_patch_action .
+ DATA mo_stage TYPE REF TO zcl_abapgit_stage .
+ DATA mv_section_count TYPE i .
+ DATA mv_pushed TYPE abap_bool .
+ DATA mi_repo_online TYPE REF TO zif_abapgit_repo_online .
+
+ METHODS render_patch
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !iv_filename TYPE string
+ !is_diff_line TYPE zif_abapgit_definitions=>ty_diff
+ !iv_index TYPE sy-tabix
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_patch_head
+ IMPORTING
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_diff TYPE zif_abapgit_gui_diff=>ty_file_diff .
+ METHODS start_staging
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RAISING
+ zcx_abapgit_exception .
+ METHODS apply_patch_from_form_fields
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RAISING
+ zcx_abapgit_exception .
+ METHODS restore_patch_flags
+ IMPORTING
+ !it_diff_files_old TYPE zif_abapgit_gui_diff=>ty_file_diffs
+ RAISING
+ zcx_abapgit_exception .
+ METHODS add_to_stage
+ RAISING
+ zcx_abapgit_exception .
+ METHODS apply_patch_all
+ IMPORTING
+ !iv_patch TYPE string
+ !iv_patch_flag TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS are_all_lines_patched
+ IMPORTING
+ !it_diff TYPE zif_abapgit_definitions=>ty_diffs_tt
+ RETURNING
+ VALUE(rv_are_all_lines_patched) TYPE abap_bool .
+ METHODS apply_patch_for
+ IMPORTING
+ !iv_filename TYPE string
+ !iv_line_index TYPE string
+ !iv_patch_flag TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_diff_object
+ IMPORTING
+ !iv_filename TYPE string
+ RETURNING
+ VALUE(ro_diff) TYPE REF TO zif_abapgit_diff
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_diff_line
+ IMPORTING
+ !io_diff TYPE REF TO zif_abapgit_diff
+ !iv_line_index TYPE string
+ RETURNING
+ VALUE(rs_diff) TYPE zif_abapgit_definitions=>ty_diff
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS is_patch_line_possible
+ IMPORTING
+ !is_diff_line TYPE zif_abapgit_definitions=>ty_diff
+ RETURNING
+ VALUE(rv_is_patch_line_possible) TYPE abap_bool .
+ METHODS render_scripts
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_addofflin DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ name TYPE string VALUE 'name',
+ package TYPE string VALUE 'package',
+ folder_logic TYPE string VALUE 'folder_logic',
+ labels TYPE string VALUE 'labels',
+ ignore_subpackages TYPE string VALUE 'ignore_subpackages',
+ main_lang_only TYPE string VALUE 'main_lang_only',
+ abap_lang_vers TYPE string VALUE 'abap_lang_vers',
+ END OF c_id .
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ choose_package TYPE string VALUE 'choose-package',
+ choose_labels TYPE string VALUE 'choose-labels',
+ create_package TYPE string VALUE 'create-package',
+ add_offline_repo TYPE string VALUE 'add-repo-offline',
+ END OF c_event .
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form .
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map .
+
+ METHODS validate_form
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form .
+
+ METHODS choose_labels
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_addonline DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ url TYPE string VALUE 'url',
+ package TYPE string VALUE 'package',
+ branch_name TYPE string VALUE 'branch_name',
+ display_name TYPE string VALUE 'display_name',
+ labels TYPE string VALUE 'labels',
+ folder_logic TYPE string VALUE 'folder_logic',
+ ignore_subpackages TYPE string VALUE 'ignore_subpackages',
+ main_lang_only TYPE string VALUE 'main_lang_only',
+ abap_lang_vers TYPE string VALUE 'abap_lang_vers',
+ END OF c_id.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ choose_package TYPE string VALUE 'choose-package',
+ create_package TYPE string VALUE 'create-package',
+ choose_branch TYPE string VALUE 'choose-branch',
+ choose_labels TYPE string VALUE 'choose-labels',
+ add_online_repo TYPE string VALUE 'add-repo-online',
+ create_repo TYPE string VALUE 'create-repository',
+ END OF c_event.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form .
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map .
+
+ METHODS validate_form
+ IMPORTING
+ io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
+
+ METHODS choose_labels
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_cr_repo DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_url TYPE string
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ !iv_url TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+ DATA mv_url TYPE string.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ repo_type TYPE string VALUE 'repo_type',
+ user_or_org TYPE string VALUE 'user_or_org',
+ name TYPE string VALUE 'name',
+ description TYPE string VALUE 'description',
+ private TYPE string VALUE 'private',
+ END OF c_id.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ create TYPE string VALUE 'create',
+ END OF c_event.
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
+
+ METHODS set_defaults
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_sett_bckg DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler .
+ INTERFACES zif_abapgit_gui_renderable .
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ mode_selection TYPE string VALUE 'mode_selection',
+ method TYPE string VALUE 'method',
+ authentication TYPE string VALUE 'authentication',
+ username TYPE string VALUE 'username',
+ password TYPE string VALUE 'password',
+ mode_settings TYPE string VALUE 'mode_settings',
+ settings TYPE string VALUE 'settings',
+ END OF c_id .
+ CONSTANTS:
+ BEGIN OF c_event,
+ run_now TYPE string VALUE 'run_now',
+ save TYPE string VALUE 'save',
+ END OF c_event .
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form .
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
+ DATA mi_repo TYPE REF TO zif_abapgit_repo .
+ DATA mv_settings_count TYPE i .
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_settings
+ RETURNING
+ VALUE(ro_form_data) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_persist
+ RETURNING
+ VALUE(rs_persist) TYPE zif_abapgit_persist_background=>ty_background
+ RAISING
+ zcx_abapgit_exception .
+ METHODS save_settings
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_sett_glob DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ proxy_settings TYPE string VALUE 'proxy_settings',
+ proxy_url TYPE string VALUE 'proxy_url',
+ proxy_port TYPE string VALUE 'proxy_port',
+ proxy_auth TYPE string VALUE 'proxy_auth',
+ proxy_bypass TYPE string VALUE 'proxy_bypass',
+ commit_settings TYPE string VALUE 'commit_settings',
+ commitmsg_comment_length TYPE string VALUE 'commitmsg_comment_length',
+ commitmsg_comment_deflt TYPE string VALUE 'commitmsg_comment_deflt',
+ commitmsg_body_size TYPE string VALUE 'commitmsg_body_size',
+ commitmsg_hide_author TYPE string VALUE 'commitmsg_hide_author',
+ devint_settings TYPE string VALUE 'devint_settings',
+ run_critical_tests TYPE string VALUE 'run_critical_tests',
+ experimental_features TYPE string VALUE 'experimental_features',
+ activate_wo_popup TYPE string VALUE 'activate_wo_popup',
+ END OF c_id.
+ CONSTANTS:
+ BEGIN OF c_event,
+ proxy_bypass TYPE string VALUE 'proxy_bypass',
+ save TYPE string VALUE 'save',
+ END OF c_event.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+
+ DATA mo_settings TYPE REF TO zcl_abapgit_settings.
+
+ METHODS validate_form
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
+ METHODS read_settings
+ RETURNING
+ VALUE(ro_form_data) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+ METHODS save_settings
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS read_proxy_bypass
+ IMPORTING
+ io_form_data TYPE REF TO zcl_abapgit_string_map
+ io_settings TYPE REF TO zcl_abapgit_settings
+ RAISING
+ zcx_abapgit_exception.
+ METHODS save_proxy_bypass
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_sett_info DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler .
+ INTERFACES zif_abapgit_gui_renderable .
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_stats,
+ measure TYPE string,
+ local TYPE i,
+ remote TYPE i,
+ END OF ty_stats .
+ TYPES:
+ BEGIN OF ty_infos,
+ size TYPE p LENGTH 16 DECIMALS 0,
+ line TYPE p LENGTH 16 DECIMALS 0,
+ sloc TYPE p LENGTH 16 DECIMALS 0,
+ END OF ty_infos .
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ info TYPE string VALUE 'info',
+ created_by TYPE string VALUE 'created_by',
+ created_at TYPE string VALUE 'created_at',
+ deserialized_by TYPE string VALUE 'deserialized_by',
+ deserialized_at TYPE string VALUE 'deserialized_at',
+ stats TYPE string VALUE 'stats',
+ stats_table TYPE string VALUE 'stats_table',
+ END OF c_id .
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form .
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
+ DATA mi_repo TYPE REF TO zif_abapgit_repo .
+ DATA:
+ mt_stats TYPE STANDARD TABLE OF ty_stats WITH KEY measure .
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_settings
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_stats
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_stats_files
+ EXPORTING
+ !et_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ !et_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_stats_state
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_stats_size_lines_sloc
+ IMPORTING
+ !it_local TYPE zif_abapgit_definitions=>ty_files_item_tt
+ !it_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ EXPORTING
+ !et_local_items TYPE zif_abapgit_definitions=>ty_items_tt
+ !et_remote_items TYPE zif_abapgit_definitions=>ty_items_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_stats_file
+ IMPORTING
+ !is_file TYPE zif_abapgit_git_definitions=>ty_file
+ RETURNING
+ VALUE(rs_info) TYPE ty_infos .
+ METHODS read_stats_objects
+ CHANGING
+ !ct_local_items TYPE zif_abapgit_definitions=>ty_items_tt
+ !ct_remote_items TYPE zif_abapgit_definitions=>ty_items_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS format_user
+ IMPORTING
+ !iv_username TYPE syuname
+ RETURNING
+ VALUE(rv_user) TYPE string .
+ METHODS format_timestamp
+ IMPORTING
+ !iv_timestamp TYPE timestampl
+ RETURNING
+ VALUE(rv_timestamp) TYPE string .
+ METHODS format_size
+ IMPORTING
+ !iv_size TYPE i
+ RETURNING
+ VALUE(rv_size) TYPE string .
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_sett_locl DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler .
+ INTERFACES zif_abapgit_gui_renderable .
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mo_popup_picklist TYPE REF TO zcl_abapgit_gui_picklist.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ local TYPE string VALUE 'local',
+ display_name TYPE string VALUE 'display_name',
+ transport_request TYPE string VALUE 'transport_request',
+ customizing_request TYPE string VALUE 'customizing_request',
+ labels TYPE string VALUE 'labels',
+ ignore_subpackages TYPE string VALUE 'ignore_subpackages',
+ write_protected TYPE string VALUE 'write_protected',
+ only_local_objects TYPE string VALUE 'only_local_objects',
+ main_language_only TYPE string VALUE 'main_language_only',
+ suppress_lxe_po_comments TYPE string VALUE 'suppress_lxe_po_comments',
+ checks TYPE string VALUE 'checks',
+ code_inspector_check_variant TYPE string VALUE 'code_inspector_check_variant',
+ block_commit TYPE string VALUE 'block_commit',
+ flow TYPE string VALUE 'flow',
+ exclude_remote_paths TYPE string VALUE 'exclude_remote_paths',
+ END OF c_id .
+ CONSTANTS:
+ BEGIN OF c_event,
+ save TYPE string VALUE 'save',
+ choose_transport_request TYPE string VALUE 'choose_transport_request',
+ choose_customizing_request TYPE string VALUE 'choose_customizing_request',
+ choose_labels TYPE string VALUE 'choose-labels',
+ choose_check_variant TYPE string VALUE 'choose_check_variant',
+ END OF c_event .
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form .
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map .
+ DATA mi_repo TYPE REF TO zif_abapgit_repo .
+ DATA ms_settings TYPE zif_abapgit_persistence=>ty_repo-local_settings .
+
+ METHODS validate_form
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_settings
+ RETURNING
+ VALUE(ro_form_data) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+ METHODS save_settings
+ RAISING
+ zcx_abapgit_exception .
+ METHODS choose_labels
+ RAISING
+ zcx_abapgit_exception .
+ METHODS choose_check_variant
+ IMPORTING
+ iv_is_return TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception .
+ METHODS choose_transport_request
+ RAISING
+ zcx_abapgit_exception .
+ METHODS choose_customizing_request
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_customizing_included
+ RETURNING
+ VALUE(rv_result) TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception .
+ METHODS handle_picklist_state
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_sett_pers DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ startup TYPE string VALUE 'startup',
+ show_default_repo TYPE string VALUE 'show_default_repo',
+ ui TYPE string VALUE 'ui',
+ ui_theme TYPE string VALUE 'ui_theme',
+ icon_scaling TYPE string VALUE 'icon_scaling',
+ max_lines TYPE string VALUE 'max_lines',
+ interaction TYPE string VALUE 'interaction',
+ adt_jump_enabled TYPE string VALUE 'adt_jump_enabled',
+ link_hints_enabled TYPE string VALUE 'link_hints_enabled',
+ link_hint_key TYPE string VALUE 'link_hint_key',
+ hotkeys TYPE string VALUE 'hotkeys',
+ resources TYPE string VALUE 'resources',
+ parallel_proc_disabled TYPE string VALUE 'parallel_proc_disabled',
+ hide_sapgui_hint TYPE string VALUE 'hide_sapgui_hint',
+ activate_wo_popup TYPE string VALUE 'activate_wo_popup',
+ label_colors TYPE string VALUE 'label_colors',
+ git_default_values TYPE string VALUE 'git_default_values',
+ default_git_uname TYPE string VALUE 'default_git_uname',
+ default_git_email TYPE string VALUE 'default_git_email',
+ END OF c_id.
+ CONSTANTS:
+ BEGIN OF c_event,
+ save TYPE string VALUE 'save',
+ END OF c_event.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+
+ DATA mo_settings TYPE REF TO zcl_abapgit_settings.
+ DATA ms_settings TYPE zif_abapgit_persist_user=>ty_s_user_settings.
+
+ METHODS validate_form
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
+ METHODS read_settings
+ RETURNING
+ VALUE(ro_form_data) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+ METHODS save_settings
+ RAISING
+ zcx_abapgit_exception.
+ METHODS render_repo_labels_help_hint
+ RETURNING
+ VALUE(rv_html) TYPE string.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_sett_remo DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler .
+ INTERFACES zif_abapgit_gui_renderable .
+ INTERFACES zif_abapgit_gui_hotkeys.
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES ty_remote_settings TYPE zif_abapgit_persistence=>ty_remote_settings.
+
+ CONSTANTS:
+ BEGIN OF c_repo_type,
+ online TYPE string VALUE 'Online Repository',
+ offline TYPE string VALUE 'Offline Repository',
+ END OF c_repo_type.
+ CONSTANTS:
+ BEGIN OF c_id,
+ general TYPE string VALUE 'general',
+ repo_type TYPE string VALUE 'repo_type',
+ offline TYPE string VALUE 'offline',
+ url TYPE string VALUE 'url',
+ head_group TYPE string VALUE 'head_group',
+ branch TYPE string VALUE 'branch',
+ tag TYPE string VALUE 'tag',
+ commit TYPE string VALUE 'commit',
+ pull_request TYPE string VALUE 'pull_request',
+ head_type TYPE string VALUE 'head_type',
+ END OF c_id.
+ CONSTANTS:
+ BEGIN OF c_event,
+ save TYPE string VALUE 'save',
+ switch TYPE string VALUE 'switch',
+ choose_url TYPE string VALUE 'choose_url',
+ choose_branch TYPE string VALUE 'choose_branch',
+ choose_tag TYPE string VALUE 'choose_tag',
+ choose_commit TYPE string VALUE 'choose_commit',
+ choose_pull_request TYPE string VALUE 'choose_pull_request',
+ change_head_type TYPE string VALUE 'change_head_type',
+ END OF c_event .
+
+ DATA mi_repo TYPE REF TO zif_abapgit_repo .
+ DATA ms_settings_snapshot TYPE ty_remote_settings.
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form .
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map .
+ DATA mv_refresh_on_back TYPE abap_bool.
+ DATA mv_offline_switch_saved_url TYPE string.
+
+ DATA mo_popup_picklist TYPE REF TO zcl_abapgit_gui_picklist.
+
+ METHODS get_remote_settings_from_repo
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(rs_settings) TYPE ty_remote_settings
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_remote_settings_from_form
+ IMPORTING
+ io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(rs_settings) TYPE ty_remote_settings
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_form_schema
+ IMPORTING
+ io_existing_form_data TYPE REF TO zcl_abapgit_string_map OPTIONAL
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS initialize_form_data
+ RETURNING
+ VALUE(ro_form_data) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS prepare_for_compare
+ IMPORTING
+ io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_form_data) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS check_protection
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS validate_form
+ IMPORTING
+ io_form_data TYPE REF TO zcl_abapgit_string_map
+ iv_connection_check TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS save_settings
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS choose_url
+ RETURNING
+ VALUE(rv_url) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS choose_branch
+ IMPORTING
+ iv_is_return TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception.
+ METHODS choose_tag
+ IMPORTING
+ iv_is_return TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception.
+ METHODS choose_pr
+ IMPORTING
+ iv_is_return TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception.
+ METHODS choose_commit
+ RETURNING
+ VALUE(rv_commit) TYPE ty_remote_settings-commit
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS switch_online_offline
+ RAISING
+ zcx_abapgit_exception.
+ METHODS switch_to_branch_tag
+ IMPORTING
+ !iv_name TYPE string OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+ METHODS switch_to_commit
+ IMPORTING
+ !iv_revert TYPE abap_bool DEFAULT abap_false
+ !iv_commit TYPE ty_remote_settings-commit OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+ METHODS switch_to_pull_req
+ IMPORTING
+ !iv_revert TYPE abap_bool DEFAULT abap_false
+ !iv_pull TYPE string OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS handle_picklist_state
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_content
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_sett_repo DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler .
+ INTERFACES zif_abapgit_gui_renderable .
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ dot TYPE string VALUE 'dot',
+ file_system TYPE string VALUE 'file_system',
+ abap_system TYPE string VALUE 'abap_system',
+ name TYPE string VALUE 'name',
+ i18n TYPE string VALUE 'i18n',
+ main_language TYPE string VALUE 'main_language',
+ i18n_langs TYPE string VALUE 'i18n_langs',
+ use_lxe TYPE string VALUE 'use_lxe',
+ wo_transaltion TYPE string VALUE 'wo_translation',
+ starting_folder TYPE string VALUE 'starting_folder',
+ folder_logic TYPE string VALUE 'folder_logic',
+ ignore TYPE string VALUE 'ignore',
+ requirements TYPE string VALUE 'requirements',
+ version_constant TYPE string VALUE 'version_constant',
+ version_value TYPE string VALUE 'version_value',
+ abap_langu_vers TYPE string VALUE 'abap_langu_vers',
+ original_system TYPE string VALUE 'original_system',
+ END OF c_id.
+ CONSTANTS:
+ BEGIN OF c_event,
+ save TYPE string VALUE 'save',
+ END OF c_event .
+ CONSTANTS c_empty_rows TYPE i VALUE 2 ##NO_TEXT.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form .
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map .
+
+ DATA mi_repo TYPE REF TO zif_abapgit_repo .
+ DATA mv_requirements_count TYPE i .
+
+ METHODS validate_form
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+ METHODS validate_version_constant
+ IMPORTING
+ !iv_version_constant TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form
+ RAISING
+ zcx_abapgit_exception .
+ METHODS read_settings
+ RETURNING
+ VALUE(ro_form_data) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+ METHODS save_settings
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_chg_pckg DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ old_package TYPE string VALUE 'old-package',
+ new_package TYPE string VALUE 'new-package',
+ remove_old TYPE string VALUE 'remove-old',
+ END OF c_id.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ change_package TYPE string VALUE 'change-package',
+ choose_package_old TYPE string VALUE 'choose-package-old',
+ choose_package_new TYPE string VALUE 'choose-package-new',
+ END OF c_event.
+
+ TYPES:
+ BEGIN OF ty_map,
+ old_package TYPE devclass,
+ new_package TYPE devclass,
+ END OF ty_map,
+ ty_mapping TYPE STANDARD TABLE OF ty_map WITH KEY old_package.
+
+ DATA mi_repo TYPE REF TO zif_abapgit_repo.
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
+
+ METHODS init_form
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS validate_form
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS change_package
+ IMPORTING
+ !iv_old_package TYPE devclass
+ !iv_new_package TYPE devclass
+ !iv_remove_old TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_package_mapping
+ IMPORTING
+ !iv_old_package TYPE devclass
+ !iv_new_package TYPE devclass
+ RETURNING
+ VALUE(rt_mapping) TYPE ty_mapping
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS create_package_hierarchy
+ IMPORTING
+ !it_mapping TYPE ty_mapping
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS delete_packages
+ IMPORTING
+ !it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS change_package_assignment
+ IMPORTING
+ !it_mapping TYPE ty_mapping
+ !it_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS update_sotr_package_assignment
+ IMPORTING
+ !it_mapping TYPE ty_mapping
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS update_repo_persistence
+ IMPORTING
+ !iv_old_package TYPE devclass
+ !iv_new_package TYPE devclass
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS update_repo_checksums
+ IMPORTING
+ !it_mapping TYPE ty_mapping
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_commit DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ !io_stage TYPE REF TO zcl_abapgit_stage
+ !iv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result DEFAULT zif_abapgit_definitions=>c_sci_result-no_run
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+ METHODS constructor
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ !io_stage TYPE REF TO zcl_abapgit_stage
+ !iv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ committer TYPE string VALUE 'committer',
+ committer_name TYPE string VALUE 'committer_name',
+ committer_email TYPE string VALUE 'committer_email',
+ message TYPE string VALUE 'message',
+ comment TYPE string VALUE 'comment',
+ body TYPE string VALUE 'body',
+ author TYPE string VALUE 'author',
+ author_name TYPE string VALUE 'author_name',
+ author_email TYPE string VALUE 'author_email',
+ new_branch_name TYPE string VALUE 'new_branch_name',
+ END OF c_id.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ commit TYPE string VALUE 'commit',
+ END OF c_event.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_settings TYPE REF TO zcl_abapgit_settings.
+ DATA mi_repo_online TYPE REF TO zif_abapgit_repo_online.
+ DATA mo_stage TYPE REF TO zcl_abapgit_stage.
+ DATA mt_stage TYPE zif_abapgit_definitions=>ty_stage_tt.
+ DATA ms_commit TYPE zif_abapgit_services_git=>ty_commit_fields.
+ DATA mv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result.
+
+ METHODS render_stage_summary
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+ METHODS render_stage_details
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+ METHODS validate_form
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
+ METHODS get_defaults
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_committer_name
+ RETURNING
+ VALUE(rv_user) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_committer_email
+ RETURNING
+ VALUE(rv_email) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_comment_default
+ RETURNING
+ VALUE(rv_text) TYPE string.
+ METHODS get_comment_object
+ IMPORTING
+ !it_stage TYPE zif_abapgit_definitions=>ty_stage_tt
+ RETURNING
+ VALUE(rv_text) TYPE string.
+ METHODS get_comment_file
+ IMPORTING
+ !it_stage TYPE zif_abapgit_definitions=>ty_stage_tt
+ RETURNING
+ VALUE(rv_text) TYPE string.
+ METHODS branch_name_to_internal
+ IMPORTING
+ iv_branch_name TYPE string
+ RETURNING
+ VALUE(rv_new_branch_name) TYPE string.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_cpackage DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES:
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ iv_name TYPE devclass
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+ DATA mv_default_name TYPE devclass.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ package TYPE string VALUE 'package',
+ description TYPE string VALUE 'description',
+ software_component TYPE string VALUE 'software_component',
+ transport_layer TYPE string VALUE 'transport_layer',
+ super_package TYPE string VALUE 'super_package',
+ END OF c_id.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ create TYPE string VALUE 'create',
+ END OF c_event.
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
+
+ METHODS get_defaults
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_data DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES:
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ add TYPE string VALUE 'add',
+ update TYPE string VALUE 'update',
+ remove TYPE string VALUE 'remove',
+ add_via_transport TYPE string VALUE 'add_via_transport',
+ END OF c_event.
+ CONSTANTS:
+ BEGIN OF c_id,
+ table TYPE string VALUE 'table',
+ where TYPE string VALUE 'where',
+ skip_initial TYPE string VALUE 'skip_initial',
+ END OF c_id.
+ DATA mi_config TYPE REF TO zif_abapgit_data_config.
+
+ PRIVATE SECTION.
+
+ DATA mi_repo TYPE REF TO zif_abapgit_repo.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+
+ CLASS-METHODS concatenated_key_to_where
+ IMPORTING
+ !iv_table TYPE tabname
+ !iv_tabkey TYPE clike
+ RETURNING
+ VALUE(rv_where) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
+ METHODS add_via_transport
+ RAISING
+ zcx_abapgit_exception .
+ METHODS build_where
+ IMPORTING
+ !io_map TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(rt_where) TYPE string_table .
+ 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 .
+ METHODS validate_table_name
+ IMPORTING
+ iv_table_name TYPE string
+ CHANGING
+ co_validation_log TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_debuginfo DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler .
+ INTERFACES zif_abapgit_gui_renderable .
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS c_exit_standalone TYPE syrepid VALUE 'ZABAPGIT_USER_EXIT' ##NO_TEXT.
+ CONSTANTS c_exit_class TYPE c LENGTH 30 VALUE 'ZCL_ABAPGIT_USER_EXIT' ##NO_TEXT.
+ CONSTANTS c_exit_interface TYPE c LENGTH 30 VALUE 'ZIF_ABAPGIT_EXIT' ##NO_TEXT.
+ CONSTANTS:
+ BEGIN OF c_action,
+ save TYPE string VALUE 'save',
+ END OF c_action.
+ DATA mv_html TYPE string .
+
+ CLASS-METHODS build_toolbar
+ RETURNING
+ VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar.
+ METHODS render_debug_info
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_exit_info
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_exit_info_methods
+ IMPORTING
+ !it_source TYPE string_table
+ !iv_clsname TYPE seoclsname OPTIONAL
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_supported_object_types
+ RETURNING
+ VALUE(rv_html) TYPE string .
+ METHODS render_scripts
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_jump_object
+ IMPORTING
+ !iv_obj_type TYPE csequence DEFAULT 'CLAS'
+ !iv_obj_name TYPE csequence
+ RETURNING
+ VALUE(rv_html) TYPE string .
+ METHODS resolve_exit_include
+ CHANGING
+ !cv_clsname TYPE seoclsname
+ !ct_source TYPE string_table.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_ex_object DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS:
+ BEGIN OF c_id,
+ object_type TYPE string VALUE 'object_type',
+ object_name TYPE string VALUE 'object_name',
+ only_main TYPE string VALUE 'only_main',
+ i18n_langs TYPE string VALUE 'i18n_langs',
+ use_lxe TYPE string VALUE 'use_lxe',
+ END OF c_id.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ export TYPE string VALUE 'export',
+ choose_object_type TYPE string VALUE 'choose-object-type',
+ END OF c_event.
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
+
+ METHODS export_object
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_ex_pckage DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CONSTANTS:
+ BEGIN OF c_id,
+ package TYPE string VALUE 'package',
+ folder_logic TYPE string VALUE 'folder_logic',
+ ignore_subpackages TYPE string VALUE 'ignore_subpackages',
+ main_lang_only TYPE string VALUE 'main_lang_only',
+ END OF c_id.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ export_package TYPE string VALUE 'export-package',
+ choose_package TYPE string VALUE 'choose-object-type',
+ END OF c_event.
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form.
+
+ METHODS export_package
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_merge DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES:
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ iv_source TYPE string
+ iv_target TYPE string
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ iv_source TYPE string
+ iv_target TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mi_repo_online TYPE REF TO zif_abapgit_repo_online.
+ DATA mi_merge TYPE REF TO zif_abapgit_merge.
+
+ CONSTANTS:
+ BEGIN OF c_actions,
+ merge TYPE string VALUE 'merge',
+ res_conflicts TYPE string VALUE 'res_conflicts',
+ END OF c_actions.
+
+ METHODS show_file
+ IMPORTING
+ !it_expanded TYPE zif_abapgit_git_definitions=>ty_expanded_tt
+ !ii_html TYPE REF TO zif_abapgit_html
+ !is_file TYPE zif_abapgit_git_definitions=>ty_expanded
+ !is_result TYPE zif_abapgit_git_definitions=>ty_expanded.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_merge_res DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES:
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ io_merge_page TYPE REF TO zcl_abapgit_gui_page_merge
+ io_merge TYPE REF TO zif_abapgit_merge
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ io_merge_page TYPE REF TO zcl_abapgit_gui_page_merge
+ io_merge TYPE REF TO zif_abapgit_merge
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_file_diff,
+ path TYPE string,
+ filename TYPE string,
+ lstate TYPE char1,
+ rstate TYPE char1,
+ fstate TYPE char1, " FILE state - Abstraction for shorter ifs
+ o_diff TYPE REF TO zif_abapgit_diff,
+ changed_by TYPE syuname,
+ type TYPE string,
+ END OF ty_file_diff .
+
+ CONSTANTS:
+ BEGIN OF c_actions,
+ toggle_mode TYPE string VALUE 'toggle_mode' ##NO_TEXT,
+ apply_merge TYPE string VALUE 'apply_merge' ##NO_TEXT,
+ apply_source TYPE string VALUE 'apply_source' ##NO_TEXT,
+ apply_target TYPE string VALUE 'apply_target' ##NO_TEXT,
+ cancel TYPE string VALUE 'cancel' ##NO_TEXT,
+ END OF c_actions .
+ CONSTANTS:
+ BEGIN OF c_merge_mode,
+ selection TYPE string VALUE 'selection' ##NO_TEXT,
+ merge TYPE string VALUE 'merge' ##NO_TEXT,
+ END OF c_merge_mode .
+ DATA mo_merge TYPE REF TO zif_abapgit_merge .
+ DATA mo_merge_page TYPE REF TO zcl_abapgit_gui_page_merge .
+ DATA mi_repo_online TYPE REF TO zif_abapgit_repo_online .
+ DATA ms_diff_file TYPE ty_file_diff .
+ DATA mv_current_conflict_index TYPE sy-tabix .
+ DATA mv_merge_mode TYPE string .
+ DATA mt_conflicts TYPE zif_abapgit_merge=>ty_merge_conflict_tt .
+
+ METHODS apply_merged_content
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_binary
+ IMPORTING
+ !iv_d1 TYPE xstring
+ !iv_d2 TYPE xstring
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+ METHODS render_beacon
+ IMPORTING
+ !is_diff_line TYPE zif_abapgit_definitions=>ty_diff
+ !is_diff TYPE ty_file_diff
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS render_diff
+ IMPORTING
+ !is_diff TYPE ty_file_diff
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_diff_head
+ IMPORTING
+ !is_diff TYPE ty_file_diff
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS render_lines
+ IMPORTING
+ !is_diff TYPE ty_file_diff
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS render_line_split
+ IMPORTING
+ !is_diff_line TYPE zif_abapgit_definitions=>ty_diff
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS render_table_head
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS resolve_diff
+ RAISING
+ zcx_abapgit_exception .
+ METHODS toggle_merge_mode .
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_merge_sel DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ branches TYPE string VALUE 'branches',
+ source TYPE string VALUE 'source',
+ target TYPE string VALUE 'target',
+ END OF c_id.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ merge TYPE string VALUE 'merge',
+ END OF c_event.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_form_util TYPE REF TO zcl_abapgit_html_form_utils.
+ DATA mi_repo_online TYPE REF TO zif_abapgit_repo_online.
+ DATA mt_branches TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt.
+
+ METHODS read_branches
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_form_schema
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_pull DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_menu_provider.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ transport_request TYPE string VALUE 'transport_request',
+ END OF c_id .
+
+ CONSTANTS: BEGIN OF c_action,
+ pull TYPE string VALUE 'pull',
+ refresh TYPE string VALUE 'refresh',
+ choose_tr TYPE string VALUE 'choose_tr',
+ END OF c_action.
+
+ CLASS-METHODS create
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ iv_trkorr TYPE trkorr OPTIONAL
+ ii_obj_filter TYPE REF TO zif_abapgit_object_filter OPTIONAL
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ ii_repo TYPE REF TO zif_abapgit_repo
+ iv_trkorr TYPE trkorr
+ ii_obj_filter TYPE REF TO zif_abapgit_object_filter OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ DATA mi_repo TYPE REF TO zif_abapgit_repo .
+ DATA mi_obj_filter TYPE REF TO zif_abapgit_object_filter .
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map .
+ DATA ms_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks .
+
+ METHODS pull
+ RAISING
+ zcx_abapgit_exception .
+ METHODS form
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form
+ RAISING
+ zcx_abapgit_exception .
+ METHODS choose_transport_request
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_repo_over DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES:
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_hotkeys,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_only_favorites TYPE abap_bool OPTIONAL
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ !iv_only_favorites TYPE abap_bool OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_overview,
+ favorite TYPE string,
+ offline TYPE abap_bool,
+ key TYPE zif_abapgit_persistence=>ty_value,
+ name TYPE string,
+ labels TYPE string_table,
+ url TYPE string,
+ package TYPE devclass,
+ branch TYPE string,
+ created_by TYPE syuname,
+ created_at TYPE string,
+ created_at_raw TYPE timestampl,
+ deserialized_by TYPE syuname,
+ deserialized_at TYPE string,
+ deserialized_at_raw TYPE timestampl,
+ write_protected TYPE abap_bool,
+ flow TYPE abap_bool,
+ END OF ty_overview,
+ ty_overviews TYPE STANDARD TABLE OF ty_overview
+ WITH NON-UNIQUE DEFAULT KEY.
+ CONSTANTS:
+ BEGIN OF c_action,
+ select TYPE string VALUE 'select',
+ apply_filter TYPE string VALUE 'apply_filter',
+ label_filter TYPE string VALUE 'label_filter',
+ clear_filter TYPE string VALUE 'clear_filter',
+ refresh_list TYPE string VALUE 'refresh_list',
+ END OF c_action,
+ c_label_filter_prefix TYPE string VALUE `label:`,
+ c_raw_field_suffix TYPE string VALUE `_RAW` ##NO_TEXT.
+
+ DATA: mt_all_labels TYPE string_table,
+ mo_label_colors TYPE REF TO zcl_abapgit_string_map.
+ DATA ms_list_settings TYPE zif_abapgit_persist_user=>ty_list_settings.
+
+ METHODS set_order_by
+ IMPORTING
+ !iv_order_by TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ METHODS set_order_direction
+ IMPORTING
+ !iv_order_descending TYPE abap_bool
+ RAISING
+ zcx_abapgit_exception.
+ METHODS set_filter
+ IMPORTING
+ it_postdata TYPE zif_abapgit_html_viewer=>ty_post_data
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS:
+ apply_filter
+ CHANGING
+ ct_overview TYPE ty_overviews,
+
+ map_repo_list_to_overview
+ IMPORTING
+ it_repo_obj_list TYPE zif_abapgit_repo_srv=>ty_repo_list
+ RETURNING
+ VALUE(rt_overview) TYPE ty_overviews
+ RAISING
+ zcx_abapgit_exception,
+
+ render_repo_list
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html
+ it_overview TYPE ty_overviews
+ RAISING
+ zcx_abapgit_exception,
+
+ render_table_header
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html,
+
+ render_table_footer
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html,
+
+ render_table_body
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html
+ it_repo_list TYPE ty_overviews
+ RAISING
+ zcx_abapgit_exception,
+
+ render_table_item
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html
+ is_repo TYPE ty_overview
+ RAISING
+ zcx_abapgit_exception,
+
+ render_header_bar
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html,
+
+ render_header_label_list
+ IMPORTING
+ ii_html TYPE REF TO zif_abapgit_html,
+
+ apply_order_by
+ CHANGING ct_overview TYPE ty_overviews.
+
+ METHODS prepare_overviews
+ RETURNING
+ VALUE(rt_overviews) TYPE ty_overviews
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_scripts
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS render_action_toolbar
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html.
+
+ METHODS render_filter_bar
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html.
+
+ METHODS build_table_scheme
+ RETURNING
+ VALUE(rt_tab_scheme) TYPE zcl_abapgit_gui_chunk_lib=>ty_col_spec_tt.
+
+ METHODS collect_all_labels
+ IMPORTING
+ it_overview TYPE ty_overviews
+ RETURNING
+ VALUE(rt_list) TYPE string_table.
+
+ METHODS render_filter_help_hint
+ RETURNING
+ VALUE(rv_html) TYPE string.
+
+ METHODS save_settings
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_repo_view DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES:
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_hotkeys,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable.
+
+ CONSTANTS:
+ BEGIN OF c_actions,
+ change_dir TYPE string VALUE 'change_dir' ##NO_TEXT,
+ toggle_hide_files TYPE string VALUE 'toggle_hide_files' ##NO_TEXT,
+ toggle_folders TYPE string VALUE 'toggle_folders' ##NO_TEXT,
+ toggle_changes TYPE string VALUE 'toggle_changes' ##NO_TEXT,
+ toggle_diff_first TYPE string VALUE 'toggle_diff_first ' ##NO_TEXT,
+ display_more TYPE string VALUE 'display_more' ##NO_TEXT,
+ go_data TYPE string VALUE 'go_data',
+ go_unit TYPE string VALUE 'go_unit',
+ END OF c_actions .
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mi_repo TYPE REF TO zif_abapgit_repo .
+ DATA mo_repo_aggregated_state TYPE REF TO zcl_abapgit_repo_item_state.
+ DATA mv_connection_error TYPE abap_bool.
+ DATA mv_cur_dir TYPE string .
+ DATA mv_hide_files TYPE abap_bool .
+ DATA mv_max_lines TYPE i .
+ DATA mv_max_setting TYPE i .
+ DATA mv_show_folders TYPE abap_bool .
+ DATA mv_changes_only TYPE abap_bool .
+ DATA mv_order_by TYPE string .
+ DATA mv_order_descending TYPE abap_bool .
+ DATA mv_diff_first TYPE abap_bool .
+ DATA mv_key TYPE zif_abapgit_persistence=>ty_value .
+ DATA mv_are_changes_recorded_in_tr TYPE abap_bool .
+
+ METHODS render_head_line
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS build_view_dropdown
+ RETURNING
+ VALUE(ro_toolbar) TYPE REF TO zcl_abapgit_html_toolbar
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_item
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item
+ !iv_render_transports TYPE abap_bool
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_item_files
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS render_item_command
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS render_file_command
+ IMPORTING
+ !is_file TYPE zif_abapgit_definitions=>ty_repo_file
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS get_item_class
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item
+ iv_is_object_row TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rv_html) TYPE string .
+ METHODS render_item_transport
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_parent_dir
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS build_dir_jump_link
+ IMPORTING
+ !iv_path TYPE string
+ RETURNING
+ VALUE(rv_html) TYPE string .
+ METHODS build_inactive_object_code
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item
+ RETURNING
+ VALUE(rv_inactive_html_code) TYPE string .
+ METHODS build_srcsystem_code
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item
+ RETURNING
+ VALUE(rv_srcsystem_html_code) TYPE string .
+ METHODS build_origlang_code
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item
+ RETURNING
+ VALUE(rv_html_code) TYPE string .
+ METHODS open_in_main_language
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_table_header
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS render_table_footer
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS apply_order_by
+ CHANGING
+ !ct_repo_items TYPE zif_abapgit_definitions=>ty_repo_item_tt
+ RAISING
+ zcx_abapgit_exception .
+ METHODS build_branch_dropdown
+ RETURNING
+ VALUE(ro_branch_dropdown) TYPE REF TO zcl_abapgit_html_toolbar
+ RAISING
+ zcx_abapgit_exception .
+ METHODS build_tag_dropdown
+ RETURNING
+ VALUE(ro_tag_dropdown) TYPE REF TO zcl_abapgit_html_toolbar
+ RAISING
+ zcx_abapgit_exception .
+ METHODS build_advanced_dropdown
+ RETURNING
+ VALUE(ro_advanced_dropdown) TYPE REF TO zcl_abapgit_html_toolbar
+ RAISING
+ zcx_abapgit_exception .
+ METHODS build_main_toolbar
+ RETURNING
+ VALUE(ro_toolbar) TYPE REF TO zcl_abapgit_html_toolbar
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_scripts
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS is_repo_lang_logon_lang
+ RETURNING
+ VALUE(rv_repo_lang_is_logon_lang) TYPE abap_bool .
+
+ METHODS render_item_changed_by
+ IMPORTING
+ !is_item TYPE zif_abapgit_definitions=>ty_repo_item
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS order_files
+ CHANGING
+ ct_files TYPE zif_abapgit_definitions=>ty_repo_file_tt.
+
+ METHODS get_crossout
+ IMPORTING
+ !iv_authorization TYPE zif_abapgit_auth=>ty_authorization OPTIONAL
+ !iv_protected TYPE abap_bool DEFAULT abap_false
+ !iv_strong TYPE abap_bool DEFAULT abap_false
+ PREFERRED PARAMETER iv_authorization
+ RETURNING
+ VALUE(rv_crossout) LIKE zif_abapgit_html=>c_html_opt-crossout.
+
+ METHODS check_branch
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS check_connection
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_run_bckg DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler .
+ INTERFACES zif_abapgit_gui_renderable .
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA: mt_text TYPE TABLE OF string.
+
+ METHODS run.
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_stage DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES:
+ zif_abapgit_gui_event_handler,
+ zif_abapgit_gui_hotkeys,
+ zif_abapgit_gui_menu_provider,
+ zif_abapgit_gui_renderable.
+
+ CONSTANTS: BEGIN OF c_action,
+ stage_refresh TYPE string VALUE 'stage_refresh',
+ stage_all TYPE string VALUE 'stage_all',
+ stage_commit TYPE string VALUE 'stage_commit',
+ stage_filter TYPE string VALUE 'stage_filter',
+ END OF c_action.
+
+ CLASS-METHODS create
+ IMPORTING
+ ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ iv_seed TYPE string OPTIONAL
+ iv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result DEFAULT zif_abapgit_definitions=>c_sci_result-no_run
+ ii_obj_filter TYPE REF TO zif_abapgit_object_filter OPTIONAL
+ ii_force_refresh TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ iv_seed TYPE string OPTIONAL
+ iv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result DEFAULT zif_abapgit_definitions=>c_sci_result-no_run
+ ii_obj_filter TYPE REF TO zif_abapgit_object_filter OPTIONAL
+ ii_force_refresh TYPE abap_bool DEFAULT abap_true
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_changed_by,
+ item TYPE zif_abapgit_definitions=>ty_item,
+ filename TYPE string,
+ name TYPE syuname,
+ END OF ty_changed_by .
+ TYPES:
+ ty_changed_by_tt TYPE SORTED TABLE OF ty_changed_by WITH UNIQUE KEY item filename.
+
+ DATA mi_repo TYPE REF TO zif_abapgit_repo.
+ DATA mi_repo_online TYPE REF TO zif_abapgit_repo_online.
+ DATA ms_files TYPE zif_abapgit_definitions=>ty_stage_files .
+ DATA mv_seed TYPE string . " Unique page id to bind JS sessionStorage
+ DATA mv_filter_value TYPE string .
+ DATA mv_sci_result TYPE zif_abapgit_definitions=>ty_sci_result.
+ DATA mi_obj_filter TYPE REF TO zif_abapgit_object_filter.
+
+ METHODS find_changed_by
+ IMPORTING
+ !it_files TYPE zif_abapgit_definitions=>ty_stage_files
+ !it_transports TYPE zif_abapgit_cts_api=>ty_transport_list
+ RETURNING
+ VALUE(rt_changed_by) TYPE ty_changed_by_tt .
+ METHODS find_transports
+ IMPORTING
+ !it_files TYPE zif_abapgit_definitions=>ty_stage_files
+ RETURNING
+ VALUE(rt_transports) TYPE zif_abapgit_cts_api=>ty_transport_list .
+ METHODS render_list
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_file
+ IMPORTING
+ !iv_context TYPE string
+ !is_file TYPE zif_abapgit_git_definitions=>ty_file
+ !is_item TYPE zif_abapgit_definitions=>ty_item OPTIONAL
+ !is_status TYPE zif_abapgit_definitions=>ty_result
+ !iv_changed_by TYPE syuname OPTIONAL
+ !iv_transport TYPE trkorr OPTIONAL
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_actions
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS stage_selected
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(ro_stage) TYPE REF TO zcl_abapgit_stage
+ RAISING
+ zcx_abapgit_exception .
+ METHODS stage_all
+ RETURNING
+ VALUE(ro_stage) TYPE REF TO zcl_abapgit_stage
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_page_patch
+ IMPORTING
+ !io_stage TYPE REF TO zcl_abapgit_stage
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ METHODS render_main_language_warning
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS count_default_files_to_commit
+ RETURNING
+ VALUE(rv_count) TYPE i .
+ METHODS render_deferred_hidden_events
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ METHODS render_scripts
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html
+ RAISING
+ zcx_abapgit_exception .
+ METHODS init_files
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_tags DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS constructor
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CONSTANTS:
+ BEGIN OF c_id,
+ tag_group TYPE string VALUE 'tag_group',
+ tag_type TYPE string VALUE 'tag_type',
+ tags TYPE string VALUE 'tags',
+ type TYPE string VALUE 'type',
+ name TYPE string VALUE 'name',
+ sha1 TYPE string VALUE 'sha1',
+ anno_group TYPE string VALUE 'anno_group',
+ tagger TYPE string VALUE 'tagger',
+ tagger_name TYPE string VALUE 'tagger_name',
+ tagger_email TYPE string VALUE 'tagger_email',
+ message TYPE string VALUE 'message',
+ body TYPE string VALUE 'body',
+ END OF c_id.
+
+ CONSTANTS:
+ BEGIN OF c_event,
+ create TYPE string VALUE 'create',
+ choose_commit TYPE string VALUE 'choose_commit',
+ change_type TYPE string VALUE 'change_type',
+ END OF c_event.
+
+ DATA mo_form TYPE REF TO zcl_abapgit_html_form.
+ DATA mo_form_data TYPE REF TO zcl_abapgit_string_map.
+ DATA mo_validation_log TYPE REF TO zcl_abapgit_string_map.
+ DATA mi_repo_online TYPE REF TO zif_abapgit_repo_online.
+ DATA mo_settings TYPE REF TO zcl_abapgit_settings.
+ DATA ms_tag TYPE zif_abapgit_git_definitions=>ty_git_tag.
+
+ METHODS get_form_schema
+ IMPORTING
+ io_form_data TYPE REF TO zcl_abapgit_string_map OPTIONAL
+ RETURNING
+ VALUE(ro_form) TYPE REF TO zcl_abapgit_html_form
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS initialize_form_data
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_tagger_name
+ RETURNING
+ VALUE(rv_user) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS get_tagger_email
+ RETURNING
+ VALUE(rv_email) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS validate_form
+ IMPORTING
+ !io_form_data TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_validation_log) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS choose_commit
+ RETURNING
+ VALUE(rv_commit) TYPE zif_abapgit_git_definitions=>ty_commit-sha1
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_page_tutorial DEFINITION
+ FINAL
+ INHERITING FROM zcl_abapgit_gui_component
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+
+ PRIVATE SECTION.
+
+ CLASS-METHODS build_main_menu
+ RETURNING
+ VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar.
+
+ENDCLASS.
+CLASS zcl_abapgit_popup_branch_list DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_render_item.
+ INTERFACES zif_abapgit_html_popup.
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_url TYPE string
+ !iv_default_branch TYPE string OPTIONAL
+ !iv_show_new_option TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_popup) TYPE REF TO zif_abapgit_html_popup.
+
+ METHODS constructor
+ IMPORTING
+ !iv_url TYPE string
+ !iv_default_branch TYPE string OPTIONAL
+ !iv_show_new_option TYPE abap_bool DEFAULT abap_false.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_repo_url TYPE string.
+ DATA mv_default_branch TYPE string.
+ DATA mv_show_new_option TYPE abap_bool.
+
+ METHODS fetch_branch_list
+ RETURNING
+ VALUE(rt_branches) TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_popup_code_insp DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_render_item .
+ INTERFACES zif_abapgit_html_popup .
+
+ CLASS-METHODS create
+ RETURNING
+ VALUE(ri_popup) TYPE REF TO zif_abapgit_html_popup .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS fetch_list
+ RETURNING
+ VALUE(rt_list) TYPE zif_abapgit_code_inspector=>ty_variants
+ RAISING
+ zcx_abapgit_exception.
+
+ENDCLASS.
+CLASS zcl_abapgit_popup_pull_request DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_render_item.
+ INTERFACES zif_abapgit_html_popup.
+
+ CLASS-METHODS create
+ IMPORTING
+ iv_url TYPE string
+ RETURNING
+ VALUE(ri_popup) TYPE REF TO zif_abapgit_html_popup.
+
+ METHODS constructor
+ IMPORTING
+ iv_url TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_repo_url TYPE string.
+
+ METHODS fetch_pull_request_list
+ RETURNING
+ VALUE(rt_pulls) TYPE zif_abapgit_pr_enum_provider=>ty_pull_requests
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_popup_tag_list DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_render_item.
+ INTERFACES zif_abapgit_html_popup.
+
+ CLASS-METHODS create
+ IMPORTING
+ iv_url TYPE string
+ RETURNING
+ VALUE(ri_popup) TYPE REF TO zif_abapgit_html_popup.
+
+ METHODS constructor
+ IMPORTING
+ iv_url TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_repo_url TYPE string.
+
+ METHODS fetch_tag_list
+ RETURNING
+ VALUE(rt_tags) TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_progress DEFINITION
+ FINAL
+ CREATE PROTECTED .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_progress .
+
+ CLASS-METHODS set_instance
+ IMPORTING
+ !ii_progress TYPE REF TO zif_abapgit_progress .
+ CLASS-METHODS get_instance
+ IMPORTING
+ !iv_total TYPE i
+ RETURNING
+ VALUE(ri_progress) TYPE REF TO zif_abapgit_progress .
+ PROTECTED SECTION.
+
+ DATA mv_total TYPE i .
+ CLASS-DATA gi_progress TYPE REF TO zif_abapgit_progress .
+
+ METHODS calc_pct
+ IMPORTING
+ !iv_current TYPE i
+ RETURNING
+ VALUE(rv_pct) TYPE i .
+ PRIVATE SECTION.
+
+ DATA mv_cv_time_next TYPE sy-uzeit .
+ DATA mv_cv_datum_next TYPE sy-datum .
+ENDCLASS.
+CLASS zcl_abapgit_gui_router DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_event_handler.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS general_page_routing
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception .
+ METHODS abapgit_services_actions
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception .
+ METHODS db_actions
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS file_download
+ IMPORTING
+ !iv_package TYPE devclass
+ !iv_xstr TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ METHODS git_services
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception .
+ METHODS sap_gui_actions
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception .
+ METHODS other_utilities
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception .
+ METHODS zip_services
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception .
+ METHODS zip_export_transport
+ IMPORTING
+ iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception.
+ METHODS go_stage_transport
+ IMPORTING
+ iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RETURNING
+ VALUE(ro_filter) TYPE REF TO zcl_abapgit_object_filter_tran
+ RAISING
+ zcx_abapgit_exception.
+ METHODS repository_services
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rs_handled) TYPE zif_abapgit_gui_event_handler=>ty_handling_result
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_page_diff
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_page_patch
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_page_stage
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ ii_obj_filter TYPE REF TO zif_abapgit_object_filter OPTIONAL
+ RETURNING
+ VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS jump_object
+ IMPORTING
+ !iv_obj_type TYPE string
+ !iv_obj_name TYPE string
+ !iv_filename TYPE string
+ !iv_sub_type TYPE string OPTIONAL
+ !iv_sub_name TYPE string OPTIONAL
+ !iv_line TYPE string OPTIONAL
+ !iv_new_window TYPE string DEFAULT 'X'
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS jump_display_transport
+ IMPORTING
+ !iv_transport TYPE trkorr
+ iv_obj_type TYPE tadir-object OPTIONAL
+ iv_obj_name TYPE tadir-obj_name OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS jump_display_user
+ IMPORTING
+ !iv_username TYPE syuname
+ RAISING
+ zcx_abapgit_exception .
+ METHODS call_browser
+ IMPORTING
+ !iv_url TYPE csequence
+ RAISING
+ zcx_abapgit_exception .
+ METHODS call_transaction
+ IMPORTING
+ !iv_tcode TYPE csequence
+ RAISING
+ zcx_abapgit_exception .
+ METHODS get_state_settings
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rv_state) TYPE i .
+ METHODS get_state_diff
+ IMPORTING
+ !ii_event TYPE REF TO zif_abapgit_gui_event
+ RETURNING
+ VALUE(rv_state) TYPE i .
+ METHODS main_page
+ RETURNING VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
+ RAISING zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_services_abapgit DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CONSTANTS c_abapgit_repo TYPE string VALUE 'https://github.com/abapGit/abapGit' ##NO_TEXT.
+ CONSTANTS c_abapgit_homepage TYPE string VALUE 'https://www.abapgit.org' ##NO_TEXT.
+ CONSTANTS c_abapgit_wikipage TYPE string VALUE 'https://docs.abapgit.org' ##NO_TEXT.
+ CONSTANTS c_dotabap_homepage TYPE string VALUE 'https://dotabap.org' ##NO_TEXT.
+ CONSTANTS c_changelog_path TYPE string VALUE '/blob/main/changelog.txt' ##NO_TEXT.
+
+ CLASS-METHODS open_abapgit_homepage
+ IMPORTING
+ iv_page TYPE string OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS open_abapgit_wikipage
+ IMPORTING
+ iv_page TYPE string OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS open_dotabap_homepage
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS open_abapgit_changelog
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_abapgit_tcode
+ RETURNING
+ VALUE(rv_tcode) TYPE tcode .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CLASS-METHODS open_url_in_browser
+ IMPORTING
+ !iv_url TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_services_git DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ CLASS-METHODS pull
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS create_branch
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS switch_branch
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS delete_branch
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS delete_tag
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS switch_tag
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception.
+ CLASS-METHODS commit
+ IMPORTING
+ !ii_repo_online TYPE REF TO zif_abapgit_repo_online
+ !is_commit TYPE zif_abapgit_services_git=>ty_commit_fields
+ !io_stage TYPE REF TO zcl_abapgit_stage
+ RAISING
+ zcx_abapgit_exception.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ENDCLASS.
+CLASS zcl_abapgit_services_repo DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS new_online
+ IMPORTING
+ !is_repo_params TYPE zif_abapgit_services_repo=>ty_repo_params
+ RETURNING
+ VALUE(ri_repo_online) TYPE REF TO zif_abapgit_repo_online
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS refresh
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS remove
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS purge
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ !iv_keep_repo TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_log) TYPE REF TO zif_abapgit_log
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS new_offline
+ IMPORTING
+ !is_repo_params TYPE zif_abapgit_services_repo=>ty_repo_params
+ RETURNING
+ VALUE(ri_repo) TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS refresh_local_checksums
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS toggle_favorite
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS transport_to_branch
+ IMPORTING
+ !iv_repository_key TYPE zif_abapgit_persistence=>ty_value
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS gui_deserialize
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS real_deserialize
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS activate_objects
+ IMPORTING
+ !iv_key TYPE zif_abapgit_persistence=>ty_repo-key
+ RETURNING
+ VALUE(ri_log) TYPE REF TO zif_abapgit_log
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS delete_unnecessary_objects
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ !ii_log TYPE REF TO zif_abapgit_log
+ !is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-METHODS check_package_exists
+ IMPORTING
+ !iv_package TYPE devclass
+ !it_remote TYPE zif_abapgit_git_definitions=>ty_files_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS popup_decisions
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo
+ CHANGING
+ !cs_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
+ RAISING
+ zcx_abapgit_cancel
+ zcx_abapgit_exception .
+ CLASS-METHODS popup_objects_overwrite
+ CHANGING
+ !ct_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS popup_data_loss_overwrite
+ IMPORTING
+ !it_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ CHANGING
+ !ct_data_loss TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS popup_package_overwrite
+ CHANGING
+ !ct_overwrite TYPE zif_abapgit_definitions=>ty_overwrite_tt
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS check_package
+ IMPORTING
+ !is_repo_params TYPE zif_abapgit_services_repo=>ty_repo_params
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS check_for_restart
+ IMPORTING
+ !ii_repo TYPE REF TO zif_abapgit_repo .
+ENDCLASS.
+CLASS zcl_abapgit_frontend_no_gui DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_ui_factory.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_frontend_services.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_frontend_services DEFINITION
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_ui_factory.
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_frontend_services.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gv_initial_folder TYPE string.
+
+ METHODS get_path_from_fullname
+ IMPORTING
+ iv_fullname TYPE string
+ RETURNING
+ VALUE(rv_path) TYPE string.
+
+ENDCLASS.
+CLASS zcl_abapgit_gui_hotkey_ctl DEFINITION
+ INHERITING FROM zcl_abapgit_gui_component
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_gui_hotkeys.
+ INTERFACES zif_abapgit_gui_hotkey_ctl.
+ INTERFACES zif_abapgit_gui_renderable.
+
+ CONSTANTS c_showhotkeys_action TYPE string VALUE `showHotkeys` ##NO_TEXT.
+
+ CLASS-METHODS should_show_hint
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+ METHODS constructor
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA:
+ mt_hotkeys TYPE zif_abapgit_gui_hotkeys=>ty_hotkeys_with_descr,
+ ms_user_settings TYPE zif_abapgit_persist_user=>ty_s_user_settings,
+ mv_visible TYPE abap_bool.
+ CLASS-DATA gv_hint_was_shown TYPE abap_bool .
+
+ METHODS render_scripts
+ IMPORTING
+ !it_hotkeys TYPE zif_abapgit_gui_hotkeys=>ty_hotkeys_with_descr
+ RETURNING
+ VALUE(ri_html) TYPE REF TO zif_abapgit_html .
+ENDCLASS.
+CLASS zcl_abapgit_password_dialog DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS popup
+ IMPORTING
+ !iv_repo_url TYPE string
+ CHANGING
+ !cv_user TYPE string
+ !cv_pass TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_popups DEFINITION
+ FINAL
+ CREATE PRIVATE
+ FRIENDS ZCL_abapgit_ui_factory .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_popups .
+
+ CLASS-METHODS center
+ IMPORTING
+ !iv_width TYPE i
+ !iv_height TYPE i
+ RETURNING
+ VALUE(rs_position) TYPE zif_abapgit_popups=>ty_popup_position.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ ty_lt_fields TYPE STANDARD TABLE OF sval WITH DEFAULT KEY .
+
+ TYPES:
+ BEGIN OF ty_commit_value_tab,
+ commit TYPE zif_abapgit_git_definitions=>ty_sha1,
+ message TYPE c LENGTH 100,
+ datetime TYPE c LENGTH 20,
+ END OF ty_commit_value_tab.
+ TYPES:
+ ty_commit_value_tab_tt TYPE STANDARD TABLE OF ty_commit_value_tab WITH DEFAULT KEY.
+
+ CONSTANTS c_answer_cancel TYPE c LENGTH 1 VALUE 'A' ##NO_TEXT.
+
+ DATA ms_position TYPE zif_abapgit_popups=>ty_popup_position.
+ TYPES ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.
+
+ METHODS add_field
+ IMPORTING
+ !iv_tabname TYPE sval-tabname
+ !iv_fieldname TYPE sval-fieldname
+ !iv_fieldtext TYPE sval-fieldtext
+ !iv_value TYPE clike DEFAULT ''
+ !iv_field_attr TYPE sval-field_attr DEFAULT ''
+ !iv_obligatory TYPE spo_obl OPTIONAL
+ CHANGING
+ !ct_fields TYPE ty_sval_tt .
+ METHODS _popup_3_get_values
+ IMPORTING
+ !iv_popup_title TYPE string
+ !iv_no_value_check TYPE abap_bool DEFAULT abap_false
+ EXPORTING
+ !ev_value_1 TYPE spo_value
+ !ev_value_2 TYPE spo_value
+ !ev_value_3 TYPE spo_value
+ CHANGING
+ !ct_fields TYPE ty_lt_fields
+ RAISING
+ zcx_abapgit_exception .
+ METHODS commit_list_build
+ IMPORTING
+ !iv_repo_url TYPE string
+ !iv_branch_name TYPE string
+ EXPORTING
+ !et_value_tab TYPE ty_commit_value_tab_tt
+ !et_commits TYPE zif_abapgit_git_definitions=>ty_commit_tt
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_ui_factory DEFINITION
+ CREATE PRIVATE
+ .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get_asset_manager
+ RETURNING
+ VALUE(ri_asset_man) TYPE REF TO zif_abapgit_gui_asset_manager
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_popups
+ RETURNING
+ VALUE(ri_popups) TYPE REF TO zif_abapgit_popups .
+ CLASS-METHODS get_gui
+ RETURNING
+ VALUE(ro_gui) TYPE REF TO zcl_abapgit_gui
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_gui_services
+ RETURNING
+ VALUE(ri_gui_services) TYPE REF TO zif_abapgit_gui_services
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS get_frontend_services
+ IMPORTING
+ !iv_disable_gui TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ri_fe_serv) TYPE REF TO zif_abapgit_frontend_services .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ CLASS-DATA gi_popups TYPE REF TO zif_abapgit_popups .
+ CLASS-DATA go_gui TYPE REF TO zcl_abapgit_gui .
+ CLASS-DATA gi_fe_services TYPE REF TO zif_abapgit_frontend_services .
+ CLASS-DATA gi_gui_services TYPE REF TO zif_abapgit_gui_services .
+ENDCLASS.
+CLASS zcl_abapgit_convert DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS bitbyte_to_int
+ IMPORTING
+ !iv_bits TYPE clike
+ RETURNING
+ VALUE(rv_int) TYPE i .
+ CLASS-METHODS x_to_bitbyte
+ IMPORTING
+ !iv_x TYPE x
+ RETURNING
+ VALUE(rv_bitbyte) TYPE zif_abapgit_git_definitions=>ty_bitbyte .
+ CLASS-METHODS string_to_xstring_utf8
+ IMPORTING
+ !iv_string TYPE string
+ RETURNING
+ VALUE(rv_xstring) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS xstring_to_string_utf8
+ IMPORTING
+ !iv_data TYPE xsequence
+ !iv_length TYPE i OPTIONAL
+ RETURNING
+ VALUE(rv_string) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS string_to_xstring_utf8_bom
+ IMPORTING
+ !iv_string TYPE string
+ RETURNING
+ VALUE(rv_xstring) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS xstring_to_string_utf8_bom
+ IMPORTING
+ !iv_xstring TYPE xstring
+ RETURNING
+ VALUE(rv_string) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS xstring_to_int
+ IMPORTING
+ !iv_xstring TYPE xstring
+ RETURNING
+ VALUE(rv_i) TYPE i
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS int_to_xstring4
+ IMPORTING
+ !iv_i TYPE i
+ RETURNING
+ VALUE(rv_xstring) TYPE xstring .
+ CLASS-METHODS split_string
+ IMPORTING
+ !iv_string TYPE string
+ RETURNING
+ VALUE(rt_lines) TYPE string_table .
+ CLASS-METHODS conversion_exit_isola_output
+ IMPORTING
+ !iv_spras TYPE spras
+ RETURNING
+ VALUE(rv_spras) TYPE laiso .
+ CLASS-METHODS string_to_xstring
+ IMPORTING
+ !iv_str TYPE string
+ RETURNING
+ VALUE(rv_xstr) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
+ CLASS-METHODS string_to_tab
+ IMPORTING
+ !iv_str TYPE string
+ EXPORTING
+ !ev_size TYPE i
+ !et_tab TYPE STANDARD TABLE .
+ CLASS-METHODS base64_to_xstring
+ IMPORTING
+ !iv_base64 TYPE string
+ RETURNING
+ VALUE(rv_xstr) TYPE xstring .
+ CLASS-METHODS xstring_to_bintab
+ IMPORTING
+ !iv_xstr TYPE xsequence
+ EXPORTING
+ !ev_size TYPE i
+ !et_bintab TYPE STANDARD TABLE .
+
+ CLASS-METHODS language_sap1_to_sap2
+ IMPORTING
+ im_lang_sap1 TYPE sy-langu
+ RETURNING
+ VALUE(re_lang_sap2) TYPE string
+ EXCEPTIONS
+ no_assignment.
+
+ CLASS-METHODS language_sap1_to_text
+ IMPORTING
+ im_lang_sap1 TYPE sy-langu
+ RETURNING
+ VALUE(re_text) TYPE string.
+
+ CLASS-METHODS language_sap2_to_sap1
+ IMPORTING
+ im_lang_sap2 TYPE laiso
+ RETURNING
+ VALUE(re_lang_sap1) TYPE sy-langu
+ EXCEPTIONS
+ no_assignment.
+
+ CLASS-METHODS language_sap1_to_bcp47
+ IMPORTING
+ im_lang_sap1 TYPE sy-langu
+ RETURNING
+ VALUE(re_lang_bcp47) TYPE string
+ EXCEPTIONS
+ no_assignment.
+
+ CLASS-METHODS language_bcp47_to_sap1
+ IMPORTING
+ im_lang_bcp47 TYPE string
+ RETURNING
+ VALUE(re_lang_sap1) TYPE sy-langu
+ EXCEPTIONS
+ no_assignment.
+
+ TYPES ty_char02 TYPE c LENGTH 2.
+ CLASS-METHODS uccp
+ IMPORTING
+ iv_uccp TYPE string
+ RETURNING
+ VALUE(rv_char) TYPE ty_char02
+ EXCEPTIONS
+ no_assignment.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CLASS-METHODS xstring_remove_bom
+ IMPORTING
+ iv_xstr TYPE xsequence
+ RETURNING
+ VALUE(rv_xstr) TYPE xstring.
+ENDCLASS.
+CLASS zcl_abapgit_log DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_log .
+
+ METHODS constructor
+ IMPORTING
+ iv_title TYPE string OPTIONAL.
+
+ CLASS-METHODS from_exception
+ IMPORTING
+ io_x TYPE REF TO cx_root
+ RETURNING
+ VALUE(ro_log) TYPE REF TO zcl_abapgit_log.
+
+ PROTECTED SECTION.
+
+ TYPES:
+ BEGIN OF ty_log, "in order of occurrence
+ msg TYPE zif_abapgit_log=>ty_msg,
+ item TYPE zif_abapgit_definitions=>ty_item,
+ exception TYPE REF TO cx_root,
+ END OF ty_log .
+
+ DATA:
+ mt_log TYPE STANDARD TABLE OF ty_log WITH DEFAULT KEY .
+ DATA mv_title TYPE string .
+
+ METHODS get_messages_status
+ IMPORTING
+ !it_msg TYPE zif_abapgit_log=>ty_msgs
+ RETURNING
+ VALUE(rv_status) TYPE sy-msgty .
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_path DEFINITION FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS split_file_location
+ IMPORTING iv_fullpath TYPE string
+ EXPORTING ev_path TYPE string
+ ev_filename TYPE string.
+
+ CLASS-METHODS is_root
+ IMPORTING iv_path TYPE string
+ RETURNING VALUE(rv_yes) TYPE abap_bool.
+
+ CLASS-METHODS is_subdir
+ IMPORTING iv_path TYPE string
+ iv_parent TYPE string
+ RETURNING VALUE(rv_yes) TYPE abap_bool.
+
+ CLASS-METHODS change_dir
+ IMPORTING iv_cur_dir TYPE string
+ iv_cd TYPE string
+ RETURNING VALUE(rv_path) TYPE string.
+
+ CLASS-METHODS get_filename_from_syspath
+ IMPORTING iv_path TYPE string
+ RETURNING VALUE(rv_filename) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_string_buffer DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS new
+ RETURNING
+ VALUE(ro_me) TYPE REF TO zcl_abapgit_string_buffer.
+ METHODS add
+ IMPORTING
+ !iv_str TYPE string
+ RETURNING
+ VALUE(ro_me) TYPE REF TO zcl_abapgit_string_buffer.
+ METHODS join_and_flush
+ RETURNING
+ VALUE(rv_str) TYPE string.
+ METHODS join_w_newline_and_flush
+ RETURNING
+ VALUE(rv_str) TYPE string.
+ METHODS join_w_space_and_flush
+ RETURNING
+ VALUE(rv_str) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mt_buffer TYPE string_table.
+ENDCLASS.
+CLASS zcl_abapgit_string_map DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ TYPES:
+ BEGIN OF ty_entry,
+ k TYPE string,
+ v TYPE string,
+ END OF ty_entry .
+ TYPES:
+ ty_entries TYPE SORTED TABLE OF ty_entry WITH UNIQUE KEY k .
+
+ DATA mt_entries TYPE ty_entries READ-ONLY .
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_case_insensitive TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_string_map .
+ METHODS constructor
+ IMPORTING
+ !iv_case_insensitive TYPE abap_bool DEFAULT abap_false .
+ METHODS get
+ IMPORTING
+ !iv_key TYPE string
+ RETURNING
+ VALUE(rv_val) TYPE string .
+ METHODS has
+ IMPORTING
+ !iv_key TYPE string
+ RETURNING
+ VALUE(rv_has) TYPE abap_bool .
+ METHODS set
+ IMPORTING
+ !iv_key TYPE string
+ !iv_val TYPE csequence OPTIONAL
+ RETURNING
+ VALUE(ro_map) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+ METHODS size
+ RETURNING
+ VALUE(rv_size) TYPE i .
+ METHODS is_empty
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool .
+ METHODS delete
+ IMPORTING
+ !iv_key TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS clear
+ RAISING
+ zcx_abapgit_exception .
+ METHODS to_abap
+ CHANGING
+ !cs_container TYPE any
+ RAISING
+ zcx_abapgit_exception .
+ METHODS strict
+ IMPORTING
+ !iv_strict TYPE abap_bool DEFAULT abap_true
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_string_map .
+ METHODS freeze .
+ METHODS merge
+ IMPORTING
+ !io_string_map TYPE REF TO zcl_abapgit_string_map
+ RETURNING
+ VALUE(ro_instance) TYPE REF TO zcl_abapgit_string_map
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ DATA mv_read_only TYPE abap_bool.
+ DATA mv_is_strict TYPE abap_bool.
+ DATA mv_case_insensitive TYPE abap_bool.
+
+ENDCLASS.
+CLASS zcl_abapgit_timer DEFINITION
+ FINAL
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS create
+ IMPORTING
+ !iv_text TYPE string OPTIONAL
+ !iv_count TYPE i OPTIONAL
+ PREFERRED PARAMETER iv_text
+ RETURNING
+ VALUE(ro_timer) TYPE REF TO zcl_abapgit_timer.
+
+ METHODS constructor
+ IMPORTING
+ !iv_text TYPE string OPTIONAL
+ !iv_count TYPE i OPTIONAL.
+
+ METHODS start
+ RETURNING
+ VALUE(ro_timer) TYPE REF TO zcl_abapgit_timer.
+
+ METHODS end
+ IMPORTING
+ !iv_output_as_status_message TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rv_result) TYPE string.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mv_text TYPE string.
+ DATA mv_count TYPE i.
+ DATA mv_timer TYPE timestampl.
+
+ENDCLASS.
+CLASS zcl_abapgit_utils DEFINITION
+ FINAL
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS is_binary
+ IMPORTING
+ !iv_data TYPE xstring
+ RETURNING
+ VALUE(rv_is_binary) TYPE abap_bool.
+ CLASS-METHODS is_valid_email
+ IMPORTING
+ iv_email TYPE string
+ RETURNING
+ VALUE(rv_valid) TYPE abap_bool.
+ CLASS-METHODS check_eol
+ IMPORTING
+ !iv_data TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ENDCLASS.
+CLASS zcl_abapgit_xml DEFINITION
+ ABSTRACT
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+ METHODS:
+ constructor
+ IMPORTING iv_filename TYPE string OPTIONAL.
+ PROTECTED SECTION.
+ DATA: mi_ixml TYPE REF TO if_ixml,
+ mi_xml_doc TYPE REF TO if_ixml_document,
+ ms_metadata TYPE zif_abapgit_definitions=>ty_metadata,
+ mv_filename TYPE string.
+
+ CONSTANTS: c_abapgit_tag TYPE string VALUE 'abapGit' ##NO_TEXT,
+ c_attr_version TYPE string VALUE 'version' ##NO_TEXT,
+ c_attr_serializer TYPE string VALUE 'serializer' ##NO_TEXT,
+ c_attr_serializer_version TYPE string VALUE 'serializer_version' ##NO_TEXT.
+
+ METHODS to_xml
+ IMPORTING iv_normalize TYPE abap_bool DEFAULT abap_true
+ RETURNING VALUE(rv_xml) TYPE string.
+
+ METHODS parse
+ IMPORTING iv_xml TYPE string
+ RAISING zcx_abapgit_exception.
+ PRIVATE SECTION.
+
+ METHODS error
+ IMPORTING
+ !ii_parser TYPE REF TO if_ixml_parser
+ RAISING
+ zcx_abapgit_exception .
+ METHODS raise_version_mismatch
+ IMPORTING
+ !iv_vers TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ METHODS raise_exception_for
+ IMPORTING
+ !ii_error TYPE REF TO if_ixml_parse_error
+ RAISING
+ zcx_abapgit_exception .
+ENDCLASS.
+CLASS zcl_abapgit_xml_input DEFINITION
+ INHERITING FROM zcl_abapgit_xml
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_xml_input.
+
+ METHODS constructor
+ IMPORTING
+ !iv_xml TYPE clike
+ !iv_filename TYPE string OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ METHODS fix_xml.
+
+ENDCLASS.
+CLASS zcl_abapgit_xml_output DEFINITION
+ INHERITING FROM zcl_abapgit_xml
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ INTERFACES zif_abapgit_xml_output.
+
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ DATA mi_raw TYPE REF TO if_ixml_element .
+
+ METHODS build_asx_node
+ RETURNING
+ VALUE(ri_element) TYPE REF TO if_ixml_element .
+ENDCLASS.
+CLASS zcl_abapgit_xml_pretty DEFINITION
+ CREATE PUBLIC .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS print
+ IMPORTING
+ !iv_xml TYPE string
+ !iv_ignore_errors TYPE abap_bool DEFAULT abap_true
+ !iv_unpretty TYPE abap_bool DEFAULT abap_false
+ RETURNING
+ VALUE(rv_xml) TYPE string
+ RAISING
+ zcx_abapgit_exception .
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CLASS-METHODS raise_error
+ IMPORTING
+ ii_parser TYPE REF TO if_ixml_parser
+ RAISING
+ zcx_abapgit_exception.
+ENDCLASS.
+CLASS zcl_abapgit_factory DEFINITION
+ CREATE PRIVATE
+ .
+
+ PUBLIC SECTION.
+
+ CLASS-METHODS get_tadir
+ RETURNING
+ VALUE(ri_tadir) TYPE REF TO zif_abapgit_tadir .
+ CLASS-METHODS get_sap_package
+ IMPORTING
+ !iv_package TYPE devclass
+ RETURNING
+ VALUE(ri_sap_package) TYPE REF TO zif_abapgit_sap_package .
+ CLASS-METHODS get_cts_api
+ RETURNING
+ VALUE(ri_cts_api) TYPE REF TO zif_abapgit_cts_api .
+ CLASS-METHODS get_default_transport
+ RETURNING
+ VALUE(ri_default_transport) TYPE REF TO zif_abapgit_default_transport.
+ CLASS-METHODS get_environment
+ RETURNING
+ VALUE(ri_environment) TYPE REF TO zif_abapgit_environment .
+ CLASS-METHODS get_longtexts
+ RETURNING
+ VALUE(ri_longtexts) TYPE REF TO zif_abapgit_longtexts .
+ CLASS-METHODS get_lxe_texts
+ RETURNING
+ VALUE(ri_lxe_texts) TYPE REF TO zif_abapgit_lxe_texts .
+ CLASS-METHODS get_sap_namespace
+ RETURNING
+ VALUE(ri_namespace) TYPE REF TO zif_abapgit_sap_namespace .
+ CLASS-METHODS get_sap_report
+ RETURNING
+ VALUE(ri_report) TYPE REF TO zif_abapgit_sap_report.
+ CLASS-METHODS get_function_module
+ RETURNING
+ VALUE(ri_function_module) TYPE REF TO zif_abapgit_function_module.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+
+ TYPES:
+ BEGIN OF ty_sap_package,
+ package TYPE devclass,
+ instance TYPE REF TO zif_abapgit_sap_package,
+ END OF ty_sap_package .
+ TYPES:
+ ty_sap_packages TYPE HASHED TABLE OF ty_sap_package
+ WITH UNIQUE KEY package .
+
+ CLASS-DATA gi_tadir TYPE REF TO zif_abapgit_tadir .
+ CLASS-DATA gt_sap_package TYPE ty_sap_packages .
+ CLASS-DATA gi_cts_api TYPE REF TO zif_abapgit_cts_api .
+ CLASS-DATA gi_environment TYPE REF TO zif_abapgit_environment .
+ CLASS-DATA gi_longtext TYPE REF TO zif_abapgit_longtexts .
+ CLASS-DATA gi_lxe_texts TYPE REF TO zif_abapgit_lxe_texts .
+ CLASS-DATA gi_sap_namespace TYPE REF TO zif_abapgit_sap_namespace .
+ CLASS-DATA gi_sap_report TYPE REF TO zif_abapgit_sap_report.
+ CLASS-DATA gi_function_module TYPE REF TO zif_abapgit_function_module.
+ CLASS-DATA gi_default_transport TYPE REF TO zif_abapgit_default_transport .
+ENDCLASS.
+CLASS zcl_abapgit_factory IMPLEMENTATION.
+ METHOD get_cts_api.
+ IF gi_cts_api IS NOT BOUND.
+ CREATE OBJECT gi_cts_api TYPE zcl_abapgit_cts_api.
+ ENDIF.
+
+ ri_cts_api = gi_cts_api.
+ ENDMETHOD.
+ METHOD get_default_transport.
+
+ IF gi_default_transport IS NOT BOUND.
+ CREATE OBJECT gi_default_transport TYPE zcl_abapgit_default_transport.
+ ENDIF.
+
+ ri_default_transport = gi_default_transport.
+
+ ENDMETHOD.
+ METHOD get_environment.
+ IF gi_environment IS NOT BOUND.
+ CREATE OBJECT gi_environment TYPE zcl_abapgit_environment.
+ ENDIF.
+ ri_environment = gi_environment.
+ ENDMETHOD.
+ METHOD get_function_module.
+
+ IF gi_function_module IS INITIAL.
+ CREATE OBJECT gi_function_module TYPE zcl_abapgit_function_module.
+ ENDIF.
+
+ ri_function_module = gi_function_module.
+
+ ENDMETHOD.
+ METHOD get_longtexts.
+
+ IF gi_longtext IS NOT BOUND.
+ CREATE OBJECT gi_longtext TYPE zcl_abapgit_longtexts.
+ ENDIF.
+ ri_longtexts = gi_longtext.
+
+ ENDMETHOD.
+ METHOD get_lxe_texts.
+
+ IF gi_lxe_texts IS NOT BOUND.
+ CREATE OBJECT gi_lxe_texts TYPE zcl_abapgit_lxe_texts.
+ ENDIF.
+ ri_lxe_texts = gi_lxe_texts.
+
+ ENDMETHOD.
+ METHOD get_sap_namespace.
+
+ IF gi_sap_namespace IS NOT BOUND.
+ CREATE OBJECT gi_sap_namespace TYPE zcl_abapgit_sap_namespace.
+ ENDIF.
+
+ ri_namespace = gi_sap_namespace.
+
+ ENDMETHOD.
+ METHOD get_sap_package.
+
+ DATA ls_sap_package TYPE ty_sap_package.
+ FIELD-SYMBOLS TYPE ty_sap_package.
+
+ ASSERT iv_package IS NOT INITIAL.
+
+ READ TABLE gt_sap_package ASSIGNING
+ WITH TABLE KEY package = iv_package.
+ IF sy-subrc <> 0.
+
+ ls_sap_package-package = iv_package.
+ CREATE OBJECT ls_sap_package-instance TYPE zcl_abapgit_sap_package
+ EXPORTING
+ iv_package = iv_package.
+
+ INSERT ls_sap_package
+ INTO TABLE gt_sap_package
+ ASSIGNING .
+
+ ENDIF.
+
+ ri_sap_package = -instance.
+
+ ENDMETHOD.
+ METHOD get_sap_report.
+
+ IF gi_sap_report IS NOT BOUND.
+ CREATE OBJECT gi_sap_report TYPE zcl_abapgit_sap_report.
+ ENDIF.
+
+ ri_report = gi_sap_report.
+
+ ENDMETHOD.
+ METHOD get_tadir.
+
+ IF gi_tadir IS INITIAL.
+ CREATE OBJECT gi_tadir TYPE zcl_abapgit_tadir.
+ ENDIF.
+
+ ri_tadir = gi_tadir.
+
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS zcl_abapgit_xml_pretty IMPLEMENTATION.
+ METHOD print.
+
+ DATA: li_ixml TYPE REF TO if_ixml,
+ li_xml_doc TYPE REF TO if_ixml_document,
+ li_stream_factory TYPE REF TO if_ixml_stream_factory,
+ li_istream TYPE REF TO if_ixml_istream,
+ li_parser TYPE REF TO if_ixml_parser,
+ lv_xstring TYPE xstring,
+ li_encoding TYPE REF TO if_ixml_encoding,
+ li_ostream TYPE REF TO if_ixml_ostream,
+ li_renderer TYPE REF TO if_ixml_renderer.
+ ASSERT NOT iv_xml IS INITIAL.
+
+ li_ixml = cl_ixml=>create( ).
+ li_xml_doc = li_ixml->create_document( ).
+
+ li_stream_factory = li_ixml->create_stream_factory( ).
+ li_istream = li_stream_factory->create_istream_xstring(
+ zcl_abapgit_convert=>string_to_xstring_utf8( iv_xml ) ).
+ li_parser = li_ixml->create_parser( stream_factory = li_stream_factory
+ istream = li_istream
+ document = li_xml_doc ).
+ li_parser->set_normalizing( abap_true ).
+ IF li_parser->parse( ) <> 0.
+ IF iv_ignore_errors = abap_true.
+ rv_xml = iv_xml.
+ RETURN.
+ ELSE.
+ raise_error( li_parser ).
+ ENDIF.
+ ENDIF.
+ li_ostream = li_stream_factory->create_ostream_xstring( lv_xstring ).
+
+ li_encoding = li_ixml->create_encoding(
+ character_set = 'utf-8'
+ byte_order = if_ixml_encoding=>co_big_endian ).
+
+ li_xml_doc->set_encoding( li_encoding ).
+ li_renderer = li_ixml->create_renderer( ostream = li_ostream
+ document = li_xml_doc ).
+
+ li_renderer->set_normalizing( boolc( iv_unpretty = abap_false ) ).
+
+ li_renderer->render( ).
+
+ rv_xml = zcl_abapgit_convert=>xstring_to_string_utf8_bom( lv_xstring ).
+ REPLACE FIRST OCCURRENCE OF 'utf-8' IN rv_xml WITH 'utf-16'.
+
+ ENDMETHOD.
+ METHOD raise_error.
+
+ DATA:
+ lv_num_errors TYPE i,
+ li_error TYPE REF TO if_ixml_parse_error,
+ lv_reason TYPE string.
+
+ lv_num_errors = ii_parser->num_errors( ).
+
+ DO lv_num_errors TIMES.
+
+ li_error = ii_parser->get_error(
+ index = sy-index
+ min_severity = if_ixml_parse_error=>co_info ).
+
+ IF li_error IS BOUND.
+ lv_reason = li_error->get_reason( ).
+ ENDIF.
+
+ IF lv_reason IS NOT INITIAL.
+ EXIT.
+ ENDIF.
+
+ ENDDO.
+
+ IF lv_reason IS NOT INITIAL.
+ zcx_abapgit_exception=>raise( lv_reason ).
+ ELSE.
+ zcx_abapgit_exception=>raise( 'error parsing xml' ).
+ ENDIF.
+
+ ENDMETHOD.
+
+ENDCLASS.
+
+CLASS ZCL_ABAPGIT_XML_OUTPUT IMPLEMENTATION.
+ METHOD build_asx_node.
+
+ DATA: li_attr TYPE REF TO if_ixml_attribute.
+ ri_element = mi_xml_doc->create_element_ns(
+ name = 'abap'
+ prefix = 'asx' ).
+
+ li_attr = mi_xml_doc->create_attribute_ns( 'version' ).
+ li_attr->if_ixml_node~set_value( '1.0' ).
+ ri_element->set_attribute_node_ns( li_attr ).
+
+ li_attr = mi_xml_doc->create_attribute_ns(
+ name = 'asx'
+ prefix = 'xmlns' ).
+ li_attr->if_ixml_node~set_value( 'http://www.sap.com/abapxml' ).
+ ri_element->set_attribute_node_ns( li_attr ).
+
+ ENDMETHOD.
+ METHOD zif_abapgit_xml_output~add.
+
+ DATA: li_node TYPE REF TO if_ixml_node,
+ li_doc TYPE REF TO if_ixml_document,
+ lt_stab TYPE abap_trans_srcbind_tab.
+
+ FIELD-SYMBOLS: LIKE LINE OF lt_stab.
+ ASSERT NOT iv_name IS INITIAL.
+
+ IF ig_data IS INITIAL.
+ RETURN.
+ ENDIF.
+
+ APPEND INITIAL LINE TO lt_stab ASSIGNING .
+ -name = iv_name.
+ GET REFERENCE OF ig_data INTO -value.
+
+ li_doc = cl_ixml=>create( )->create_document( ).
+
+ CALL TRANSFORMATION id
+ OPTIONS initial_components = 'suppress'
+ SOURCE (lt_stab)
+ RESULT XML li_doc.
+
+ li_node = mi_xml_doc->get_root( )->get_first_child( ).
+ IF li_node IS BOUND.
+ mi_xml_doc->get_root( )->get_first_child( )->get_first_child( )->append_child(
+ li_doc->get_root( )->get_first_child( )->get_first_child( )->get_first_child( ) ).
+ ELSE.
+ mi_xml_doc->get_root( )->append_child( li_doc->get_root( )->get_first_child( ) ).
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD zif_abapgit_xml_output~add_xml.
+
+ DATA: li_element TYPE REF TO if_ixml_element.
+
+ li_element = mi_xml_doc->create_element( iv_name ).
+ li_element->append_child( ii_xml ).
+
+ mi_xml_doc->get_root( )->get_first_child( )->get_first_child( )->append_child( li_element ).
+
+ ENDMETHOD.
+ METHOD zif_abapgit_xml_output~render.
+
+ DATA: li_git TYPE REF TO if_ixml_element,
+ li_abap TYPE REF TO if_ixml_element.
+ IF mi_raw IS INITIAL.
+ li_abap ?= mi_xml_doc->get_root( )->get_first_child( ).
+ mi_xml_doc->get_root( )->remove_child( li_abap ).
+ IF li_abap IS INITIAL.
+ li_abap = build_asx_node( ).
+ ENDIF.
+ ELSE.
+ li_abap = mi_raw.
+ ENDIF.
+
+ li_git = mi_xml_doc->create_element( c_abapgit_tag ).
+ li_git->set_attribute( name = c_attr_version
+ value = zif_abapgit_version=>c_xml_version ).
+ IF NOT is_metadata IS INITIAL.
+ li_git->set_attribute( name = c_attr_serializer
+ value = is_metadata-class ).
+ li_git->set_attribute( name = c_attr_serializer_version
+ value = is_metadata-version ).
+ ENDIF.
+ li_git->append_child( li_abap ).
+ mi_xml_doc->get_root( )->append_child( li_git ).
+
+ rv_xml = to_xml( iv_normalize ).
+
+ ENDMETHOD.
+ METHOD zif_abapgit_xml_output~set_raw.
+ mi_raw = ii_raw.
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS ZCL_ABAPGIT_XML_INPUT IMPLEMENTATION.
+ METHOD constructor.
+
+ super->constructor( iv_filename ).
+ parse( iv_xml ).
+ fix_xml( ).
+
+ ENDMETHOD.
+ METHOD fix_xml.
+
+ DATA: li_git TYPE REF TO if_ixml_element,
+ li_abap TYPE REF TO if_ixml_node.
+ li_git ?= mi_xml_doc->find_from_name_ns( depth = 0
+ name = c_abapgit_tag ).
+ li_abap = li_git->get_first_child( ).
+
+ mi_xml_doc->get_root( )->remove_child( li_git ).
+ mi_xml_doc->get_root( )->append_child( li_abap ).
+
+ ENDMETHOD.
+ METHOD zif_abapgit_xml_input~get_metadata.
+ rs_metadata = ms_metadata.
+ ENDMETHOD.
+ METHOD zif_abapgit_xml_input~get_raw.
+ ri_raw = mi_xml_doc.
+ ENDMETHOD.
+ METHOD zif_abapgit_xml_input~read.
+
+ DATA: lx_error TYPE REF TO cx_transformation_error,
+ lt_rtab TYPE abap_trans_resbind_tab.
+
+ FIELD-SYMBOLS: LIKE LINE OF lt_rtab.
+
+ ASSERT NOT iv_name IS INITIAL.
+
+ CLEAR cg_data. "Initialize result to avoid problems with empty values
+
+ APPEND INITIAL LINE TO lt_rtab ASSIGNING .
+ -name = iv_name.
+ GET REFERENCE OF cg_data INTO -value.
+
+ TRY.
+ CALL TRANSFORMATION id
+ OPTIONS value_handling = 'accept_data_loss'
+ SOURCE XML mi_xml_doc
+ RESULT (lt_rtab).
+ CATCH cx_transformation_error INTO lx_error.
+ IF mv_filename IS INITIAL.
+ zcx_abapgit_exception=>raise( lx_error->if_message~get_text( ) ).
+ ELSE.
+ zcx_abapgit_exception=>raise( |File { mv_filename }: { lx_error->if_message~get_text( ) }| ).
+ ENDIF.
+ ENDTRY.
+
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS zcl_abapgit_xml IMPLEMENTATION.
+ METHOD constructor.
+ mi_ixml = cl_ixml=>create( ).
+ mi_xml_doc = mi_ixml->create_document( ).
+ mv_filename = iv_filename.
+ ENDMETHOD.
+ METHOD error.
+
+ IF ii_parser->num_errors( ) <> 0.
+ raise_exception_for( ii_parser->get_error( 0 ) ).
+ ENDIF.
+
+ IF mv_filename IS INITIAL.
+ zcx_abapgit_exception=>raise( |Error while parsing XML| ).
+ ELSE.
+ zcx_abapgit_exception=>raise( |Error while parsing XML file { mv_filename }| ).
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD parse.
+
+ DATA: li_stream_factory TYPE REF TO if_ixml_stream_factory,
+ li_istream TYPE REF TO if_ixml_istream,
+ li_element TYPE REF TO if_ixml_element,
+ li_version TYPE REF TO if_ixml_node,
+ li_parser TYPE REF TO if_ixml_parser.
+ ASSERT NOT iv_xml IS INITIAL.
+
+ li_stream_factory = mi_ixml->create_stream_factory( ).
+ li_istream = li_stream_factory->create_istream_string( iv_xml ).
+ li_parser = mi_ixml->create_parser( stream_factory = li_stream_factory
+ istream = li_istream
+ document = mi_xml_doc ).
+ li_parser->add_strip_space_element( ).
+ IF li_parser->parse( ) <> 0.
+ error( li_parser ).
+ ENDIF.
+
+ li_istream->close( ).
+ li_element = mi_xml_doc->find_from_name_ns( depth = 0
+ name = c_abapgit_tag ).
+ li_version = li_element->if_ixml_node~get_attributes(
+ )->get_named_item_ns( c_attr_version ).
+ IF li_version->get_value( ) <> zif_abapgit_version=>c_xml_version.
+ raise_version_mismatch( li_version->get_value( ) ).
+ ENDIF.
+
+* buffer serializer metadata. Git node will be removed lateron
+ ms_metadata-class = li_element->get_attribute_ns( c_attr_serializer ).
+ ms_metadata-version = li_element->get_attribute_ns( c_attr_serializer_version ).
+
+ ENDMETHOD.
+ METHOD raise_exception_for.
+ DATA lv_message TYPE string.
+
+ lv_message = |XML parser error: { ii_error->get_reason( ) }, | &&
+ |Line { ii_error->get_line( ) } | &&
+ |Col. { ii_error->get_column( ) }|.
+
+ IF mv_filename IS NOT INITIAL.
+ lv_message = lv_message && | File { mv_filename }|.
+ ENDIF.
+
+ zcx_abapgit_exception=>raise( lv_message ).
+
+ ENDMETHOD.
+ METHOD raise_version_mismatch.
+
+ DATA lv_text TYPE string.
+
+ lv_text = |The XML versions do not match, expected: { zif_abapgit_version=>c_xml_version }, actual: { iv_vers }|.
+
+ IF mv_filename IS NOT INITIAL.
+ lv_text = lv_text && |, file: { mv_filename }|.
+ ENDIF.
+
+ lv_text = lv_text && | (see https://docs.abapgit.org/other-xml-mismatch.html)|.
+
+ zcx_abapgit_exception=>raise( lv_text ).
+
+ ENDMETHOD.
+ METHOD to_xml.
+* will render to codepage UTF-16
+
+ DATA: li_ostream TYPE REF TO if_ixml_ostream,
+ li_renderer TYPE REF TO if_ixml_renderer,
+ li_streamfactory TYPE REF TO if_ixml_stream_factory.
+
+ li_streamfactory = mi_ixml->create_stream_factory( ).
+
+ li_ostream = li_streamfactory->create_ostream_cstring( rv_xml ).
+
+ li_renderer = mi_ixml->create_renderer( ostream = li_ostream
+ document = mi_xml_doc ).
+ li_renderer->set_normalizing( iv_normalize ).
+
+ li_renderer->render( ).
+
+ " handling of BOM moved to zcl_abapgit_convert=>string_to_xstring_utf8_bom
+
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS zcl_abapgit_utils IMPLEMENTATION.
+ METHOD check_eol.
+
+ " Check if data is using CRLF as EOL separator. If only LF is used, data was likely
+ " edited by external tools
+ IF iv_data IS NOT INITIAL AND
+ iv_data CS cl_abap_char_utilities=>newline AND
+ iv_data NS cl_abap_char_utilities=>cr_lf.
+ zcx_abapgit_exception=>raise( 'Incorrect source format: Requires CRLF instead of LF' ).
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD is_binary.
+
+ " Previously we did a simple char range test described here
+ " stackoverflow.com/questions/277521/how-to-identify-the-file-content-as-ascii-or-binary
+ " but this is insufficient if the data contains German umlauts and other special characters.
+ " Therefore we adopted another algorithm, which is similarly used by AL11
+ " RSWATCH0 / GUESS_FILE_TYPE
+ " We count non-printable characters if there are more than XX% it's binary.
+
+ CONSTANTS:
+ lc_binary_threshold TYPE i VALUE 10,
+ lc_bytes_to_check TYPE i VALUE 1000.
+
+ DATA: lv_string_data TYPE string,
+ lv_printable_chars_count TYPE i,
+ lv_percentage TYPE i,
+ lv_data TYPE xstring,
+ lv_xlen TYPE i.
+
+ lv_xlen = xstrlen( iv_data ).
+ IF lv_xlen = 0.
+ RETURN.
+ ENDIF.
+
+ lv_xlen = nmin(
+ val1 = lv_xlen
+ val2 = lc_bytes_to_check ).
+
+ lv_data = iv_data(lv_xlen).
+
+ TRY.
+ lv_string_data = zcl_abapgit_convert=>xstring_to_string_utf8( lv_data ).
+ CATCH zcx_abapgit_exception.
+ " Contains data that does not convert to UTF-8 so consider it binary
+ rv_is_binary = abap_true.
+ RETURN.
+ ENDTRY.
+
+ REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN lv_string_data WITH space.
+ REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN lv_string_data WITH space.
+
+ FIND ALL OCCURRENCES OF REGEX '[^[:print:]]' IN lv_string_data MATCH COUNT lv_printable_chars_count.
+ lv_percentage = lv_printable_chars_count * 100 / strlen( lv_string_data ).
+ rv_is_binary = boolc( lv_percentage > lc_binary_threshold ).
+
+ ENDMETHOD.
+ METHOD is_valid_email.
+
+ " Email address validation (RFC 5322)
+ " https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s01.html
+ CONSTANTS lc_email_regex TYPE string VALUE
+ '[\w!#$%&*+/=?`{|}~^-]+(?:\.[\w!#$%&*+/=?`{|}~^-]+)*@(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,6}'.
+
+ IF iv_email IS INITIAL.
+ rv_valid = abap_true.
+ ELSE.
+ FIND REGEX lc_email_regex IN iv_email.
+ rv_valid = boolc( sy-subrc = 0 ).
+ ENDIF.
+
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS zcl_abapgit_timer IMPLEMENTATION.
+ METHOD constructor.
+ mv_text = iv_text.
+ mv_count = iv_count.
+ ENDMETHOD.
+ METHOD create.
+ CREATE OBJECT ro_timer
+ EXPORTING
+ iv_text = iv_text
+ iv_count = iv_count.
+ ENDMETHOD.
+ METHOD end.
+
+ DATA:
+ lv_timestamp TYPE timestampl,
+ lv_runtime TYPE timestampl,
+ lv_sec TYPE p LENGTH 11 DECIMALS 2.
+
+ IF mv_timer IS INITIAL.
+ rv_result = 'Runtime measurement has not been started'.
+ ELSE.
+ GET TIME STAMP FIELD lv_timestamp.
+
+ TRY.
+ lv_runtime = cl_abap_tstmp=>subtract(
+ tstmp1 = lv_timestamp
+ tstmp2 = mv_timer ).
+
+ lv_sec = lv_runtime. " round to 2 decimal places
+
+ IF mv_count = 1.
+ rv_result = |1 object, |.
+ ELSEIF mv_count > 1.
+ rv_result = |{ mv_count } objects, |.
+ ENDIF.
+
+ rv_result = rv_result && |{ lv_sec } seconds|.
+
+ CATCH cx_parameter_invalid.
+ rv_result = 'Error getting runtime measurement'.
+ ENDTRY.
+ ENDIF.
+
+ IF iv_output_as_status_message = abap_true.
+ MESSAGE s000(oo) WITH mv_text rv_result.
+ ENDIF.
+
+ IF mv_text IS NOT INITIAL.
+ rv_result = |{ mv_text } { rv_result }|.
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD start.
+ GET TIME STAMP FIELD mv_timer.
+ ro_timer = me.
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS ZCL_ABAPGIT_STRING_MAP IMPLEMENTATION.
+ METHOD clear.
+ IF mv_read_only = abap_true.
+ zcx_abapgit_exception=>raise( 'Cannot clear. This string map is immutable' ).
+ ENDIF.
+ CLEAR mt_entries.
+ ENDMETHOD.
+ METHOD constructor.
+ mv_is_strict = abap_true.
+ mv_case_insensitive = iv_case_insensitive.
+ ENDMETHOD.
+ METHOD create.
+ CREATE OBJECT ro_instance
+ EXPORTING
+ iv_case_insensitive = iv_case_insensitive.
+ ENDMETHOD.
+ METHOD delete.
+
+ IF mv_read_only = abap_true.
+ zcx_abapgit_exception=>raise( 'Cannot delete. This string map is immutable' ).
+ ENDIF.
+
+ DELETE mt_entries WHERE k = iv_key.
+
+ ENDMETHOD.
+ METHOD freeze.
+ mv_read_only = abap_true.
+ ENDMETHOD.
+ METHOD get.
+
+ DATA lv_key LIKE iv_key.
+ FIELD-SYMBOLS LIKE LINE OF mt_entries.
+
+ IF mv_case_insensitive = abap_true.
+ lv_key = to_upper( iv_key ).
+ ELSE.
+ lv_key = iv_key.
+ ENDIF.
+
+ READ TABLE mt_entries ASSIGNING WITH KEY k = lv_key.
+ IF sy-subrc IS INITIAL.
+ rv_val = -v.
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD has.
+
+ READ TABLE mt_entries TRANSPORTING NO FIELDS WITH KEY k = iv_key.
+ rv_has = boolc( sy-subrc IS INITIAL ).
+
+ ENDMETHOD.
+ METHOD is_empty.
+ rv_yes = boolc( lines( mt_entries ) = 0 ).
+ ENDMETHOD.
+ METHOD merge.
+
+ FIELD-SYMBOLS LIKE LINE OF mt_entries.
+
+ LOOP AT io_string_map->mt_entries ASSIGNING .
+ set(
+ iv_key = -k
+ iv_val = -v ).
+ ENDLOOP.
+
+ ro_instance = me.
+
+ ENDMETHOD.
+ METHOD set.
+
+ DATA lv_key LIKE iv_key.
+ DATA ls_entry LIKE LINE OF mt_entries.
+ FIELD-SYMBOLS LIKE LINE OF mt_entries.
+
+ IF mv_read_only = abap_true.
+ zcx_abapgit_exception=>raise( 'Cannot set. This string map is immutable' ).
+ ENDIF.
+
+ IF mv_case_insensitive = abap_true.
+ lv_key = to_upper( iv_key ).
+ ELSE.
+ lv_key = iv_key.
+ ENDIF.
+
+ READ TABLE mt_entries ASSIGNING WITH KEY k = lv_key.
+ IF sy-subrc IS INITIAL.
+ -v = iv_val.
+ ELSE.
+ ls_entry-k = lv_key.
+ ls_entry-v = iv_val.
+ INSERT ls_entry INTO TABLE mt_entries.
+ ENDIF.
+
+ ro_map = me.
+
+ ENDMETHOD.
+ METHOD size.
+
+ rv_size = lines( mt_entries ).
+
+ ENDMETHOD.
+ METHOD strict.
+ mv_is_strict = iv_strict.
+ ro_instance = me.
+ ENDMETHOD.
+ METHOD to_abap.
+
+ DATA lo_type TYPE REF TO cl_abap_typedescr.
+ DATA lv_field TYPE string.
+ FIELD-SYMBOLS LIKE LINE OF mt_entries.
+ FIELD-SYMBOLS TYPE any.
+
+ lo_type = cl_abap_typedescr=>describe_by_data( cs_container ).
+ IF lo_type->type_kind <> cl_abap_typedescr=>typekind_struct1
+ AND lo_type->type_kind <> cl_abap_typedescr=>typekind_struct2.
+ zcx_abapgit_exception=>raise( 'Only structures supported' ).
+ ENDIF.
+
+ LOOP AT mt_entries ASSIGNING .
+ lv_field = to_upper( -k ).
+ ASSIGN COMPONENT lv_field OF STRUCTURE cs_container TO .
+ IF sy-subrc = 0.
+ " TODO check target type ?
+ = -v.
+ ELSEIF mv_is_strict = abap_false.
+ CONTINUE.
+ ELSE.
+ zcx_abapgit_exception=>raise( |Component { lv_field } not found in target| ).
+ ENDIF.
+ ENDLOOP.
+
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS ZCL_ABAPGIT_STRING_BUFFER IMPLEMENTATION.
+ METHOD add.
+ APPEND iv_str TO mt_buffer.
+ ro_me = me.
+ ENDMETHOD.
+ METHOD join_and_flush.
+ rv_str = concat_lines_of( mt_buffer ).
+ CLEAR mt_buffer.
+ ENDMETHOD.
+ METHOD join_w_newline_and_flush.
+ rv_str = concat_lines_of(
+ table = mt_buffer
+ sep = cl_abap_char_utilities=>newline ).
+ CLEAR mt_buffer.
+ ENDMETHOD.
+ METHOD join_w_space_and_flush.
+ rv_str = concat_lines_of(
+ table = mt_buffer
+ sep = ` ` ).
+ CLEAR mt_buffer.
+ ENDMETHOD.
+ METHOD new.
+ CREATE OBJECT ro_me.
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS ZCL_ABAPGIT_PATH IMPLEMENTATION.
+ METHOD change_dir.
+
+ DATA: lv_last TYPE i,
+ lv_temp TYPE string.
+
+ lv_last = strlen( iv_cur_dir ) - 1.
+
+ IF iv_cd = '' OR iv_cd = '.'. " No change
+ rv_path = iv_cur_dir.
+ ELSEIF iv_cd+0(1) = '/'. " Absolute path
+ rv_path = iv_cd.
+ ELSEIF iv_cd = '..'. " CD back
+ IF iv_cur_dir = '/' OR iv_cur_dir = ''. " Back from root = root
+ rv_path = iv_cur_dir.
+ ELSE.
+ lv_temp = reverse( iv_cur_dir ).
+ IF lv_temp+0(1) = '/'.
+ SHIFT lv_temp BY 1 PLACES LEFT.
+ ENDIF.
+ SHIFT lv_temp UP TO '/' LEFT.
+ rv_path = reverse( lv_temp ).
+ ENDIF.
+ ELSEIF iv_cur_dir+lv_last(1) = '/'. " Append cd to cur_dir separated by /
+ rv_path = iv_cur_dir && iv_cd.
+ ELSE.
+ rv_path = iv_cur_dir && '/' && iv_cd.
+ ENDIF.
+
+ " TODO: improve logic and cases
+
+ ENDMETHOD.
+ METHOD get_filename_from_syspath.
+
+ DATA: lv_split TYPE c LENGTH 1,
+ lv_index TYPE i,
+ lt_split TYPE TABLE OF string.
+
+ " filename | c:\filename | /dir/filename | \\server\filename
+ IF iv_path CA '/'.
+ lv_split = '/'.
+ ELSE.
+ lv_split = '\'.
+ ENDIF.
+
+ SPLIT iv_path AT lv_split INTO TABLE lt_split.
+
+ lv_index = lines( lt_split ).
+
+ READ TABLE lt_split INDEX lv_index INTO rv_filename.
+
+ ENDMETHOD.
+ METHOD is_root.
+ rv_yes = boolc( iv_path = '/' ).
+ ENDMETHOD.
+ METHOD is_subdir.
+
+ DATA lv_len TYPE i.
+ DATA lv_last TYPE i.
+
+ lv_len = strlen( iv_parent ).
+ lv_last = lv_len - 1.
+ rv_yes = boolc( strlen( iv_path ) > lv_len
+ AND iv_path+0(lv_len) = iv_parent
+ AND ( iv_parent+lv_last(1) = '/' OR iv_path+lv_len(1) = '/' ) ).
+
+ ENDMETHOD.
+ METHOD split_file_location.
+
+ DATA: lv_cnt TYPE i,
+ lv_len TYPE i.
+
+ FIND FIRST OCCURRENCE OF REGEX '^/(.*/)?' IN iv_fullpath
+ MATCH COUNT lv_cnt
+ MATCH LENGTH lv_len.
+
+ IF lv_cnt > 0.
+ ev_path = iv_fullpath+0(lv_len).
+ ev_filename = iv_fullpath+lv_len.
+ ELSE.
+ CLEAR ev_path.
+ ev_filename = iv_fullpath.
+ ENDIF.
+
+ ev_filename = cl_http_utility=>unescape_url( escaped = ev_filename ).
+
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS zcl_abapgit_log IMPLEMENTATION.
+ METHOD constructor.
+
+ zif_abapgit_log~set_title( iv_title ).
+
+ ENDMETHOD.
+ METHOD from_exception.
+
+ CREATE OBJECT ro_log.
+
+ IF io_x IS BOUND.
+ ro_log->zif_abapgit_log~add_exception( io_x ).
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD get_messages_status.
+
+ DATA lr_msg TYPE REF TO zif_abapgit_log=>ty_msg.
+ rv_status = 'S'.
+ LOOP AT it_msg REFERENCE INTO lr_msg.
+ CASE lr_msg->type.
+ WHEN 'E' OR 'A' OR 'X'.
+ rv_status = 'E'. "not okay
+ EXIT.
+ WHEN 'W'.
+ rv_status = 'W'. "maybe
+ CONTINUE.
+ WHEN 'S' OR 'I'.
+ IF rv_status <> 'W'.
+ rv_status = 'S'. "okay
+ ENDIF.
+ CONTINUE.
+ WHEN OTHERS. "unknown
+ CONTINUE.
+ ENDCASE.
+ ENDLOOP.
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~add.
+
+ FIELD-SYMBOLS: LIKE LINE OF mt_log.
+
+ APPEND INITIAL LINE TO mt_log ASSIGNING .
+ -msg-text = iv_msg.
+ -msg-type = iv_type.
+ -msg-id = iv_class.
+ -msg-number = iv_number.
+ -item = is_item.
+ -exception = ix_exc.
+
+ CASE iv_type.
+ WHEN 'E' OR 'A' OR 'X'.
+ -msg-level = zif_abapgit_log=>c_log_level-error.
+ WHEN 'W'.
+ -msg-level = zif_abapgit_log=>c_log_level-warning.
+ WHEN 'S' OR 'I'.
+ -msg-level = zif_abapgit_log=>c_log_level-info.
+ WHEN OTHERS. "unknown
+ ASSERT 0 = 1.
+ ENDCASE.
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~add_error.
+
+ zif_abapgit_log~add(
+ iv_msg = iv_msg
+ iv_type = 'E'
+ is_item = is_item ).
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~add_exception.
+
+ DATA lx_exc TYPE REF TO cx_root.
+ DATA lv_msg TYPE string.
+ lx_exc = ix_exc.
+ DO.
+ lv_msg = lx_exc->get_text( ).
+ zif_abapgit_log~add( iv_msg = lv_msg
+ iv_type = 'E'
+ is_item = is_item
+ ix_exc = lx_exc ).
+ IF lx_exc->previous IS BOUND.
+ lx_exc = lx_exc->previous.
+ ELSE.
+ EXIT.
+ ENDIF.
+ ENDDO.
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~add_info.
+
+ zif_abapgit_log~add(
+ iv_msg = iv_msg
+ iv_type = 'I'
+ is_item = is_item ).
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~add_success.
+
+ zif_abapgit_log~add(
+ iv_msg = iv_msg
+ iv_type = 'S'
+ is_item = is_item ).
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~add_warning.
+
+ zif_abapgit_log~add(
+ iv_msg = iv_msg
+ iv_type = 'W'
+ is_item = is_item ).
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~clear.
+ CLEAR mt_log.
+ ENDMETHOD.
+ METHOD zif_abapgit_log~clone.
+
+ DATA lo_log TYPE REF TO zcl_abapgit_log.
+
+ CREATE OBJECT lo_log EXPORTING iv_title = mv_title.
+ lo_log->mt_log = mt_log.
+ ri_log = lo_log.
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~count.
+ rv_count = lines( mt_log ).
+ ENDMETHOD.
+ METHOD zif_abapgit_log~get_item_status.
+
+ DATA lr_log TYPE REF TO ty_log.
+ DATA ls_msg TYPE zif_abapgit_log=>ty_msg.
+ DATA ls_item_status TYPE zif_abapgit_log=>ty_item_status_out.
+ DATA lr_item_status TYPE REF TO zif_abapgit_log=>ty_item_status_out.
+
+ "collect all message for all objects
+ LOOP AT mt_log REFERENCE INTO lr_log.
+ CLEAR ls_item_status.
+ ls_item_status-item = lr_log->item.
+ READ TABLE rt_item_status REFERENCE INTO lr_item_status
+ WITH KEY item-obj_type = ls_item_status-item-obj_type
+ item-obj_name = ls_item_status-item-obj_name.
+ IF sy-subrc <> 0.
+ INSERT ls_item_status INTO TABLE rt_item_status.
+ GET REFERENCE OF ls_item_status INTO lr_item_status.
+ ENDIF.
+ CLEAR ls_msg.
+ ls_msg-type = lr_log->msg-type.
+ ls_msg-text = lr_log->msg-text.
+ INSERT ls_msg INTO TABLE lr_item_status->messages.
+ ENDLOOP.
+
+ "determine object status from object messages
+ LOOP AT rt_item_status REFERENCE INTO lr_item_status.
+ lr_item_status->status = get_messages_status( lr_item_status->messages ).
+ IF lr_item_status->messages IS INITIAL.
+ CLEAR ls_msg.
+ ls_msg-type = 'I'.
+ ls_msg-text = 'No message'.
+ INSERT ls_msg INTO TABLE lr_item_status->messages.
+ ENDIF.
+ ENDLOOP.
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~get_log_level.
+
+ FIELD-SYMBOLS LIKE LINE OF mt_log.
+
+ rv_level = zif_abapgit_log=>c_log_level-empty.
+
+ LOOP AT mt_log ASSIGNING .
+ IF -msg-level = zif_abapgit_log=>c_log_level-error.
+ rv_level = zif_abapgit_log=>c_log_level-error.
+ EXIT.
+ ELSEIF -msg-level > rv_level.
+ rv_level = -msg-level.
+ ENDIF.
+ ENDLOOP.
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~get_messages.
+ DATA ls_msg TYPE zif_abapgit_log~ty_log_out.
+ FIELD-SYMBOLS TYPE ty_log.
+ LOOP AT mt_log ASSIGNING .
+ ls_msg-type = -msg-type.
+ ls_msg-id = -msg-id.
+ ls_msg-number = -msg-number.
+ ls_msg-text = -msg-text.
+ ls_msg-obj_type = -item-obj_type.
+ ls_msg-obj_name = -item-obj_name.
+ ls_msg-exception = -exception.
+ APPEND ls_msg TO rt_msg.
+ ENDLOOP.
+ DELETE ADJACENT DUPLICATES FROM rt_msg.
+ ENDMETHOD.
+ METHOD zif_abapgit_log~get_status.
+
+ DATA lr_log TYPE REF TO ty_log.
+ rv_status = zif_abapgit_log=>c_status-ok.
+ LOOP AT mt_log REFERENCE INTO lr_log.
+ CASE lr_log->msg-type.
+ WHEN 'E' OR 'A' OR 'X'.
+ rv_status = zif_abapgit_log=>c_status-error.
+ EXIT.
+ WHEN 'W'.
+ rv_status = zif_abapgit_log=>c_status-warning.
+ CONTINUE.
+ WHEN 'S' OR 'I'.
+ IF rv_status <> zif_abapgit_log=>c_status-warning.
+ rv_status = zif_abapgit_log=>c_status-ok.
+ ENDIF.
+ CONTINUE.
+ WHEN OTHERS. "unknown
+ ASSERT 0 = 1.
+ ENDCASE.
+ ENDLOOP.
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~get_title.
+ rv_title = mv_title.
+ IF rv_title IS INITIAL.
+ rv_title = 'Log'.
+ ENDIF.
+ ENDMETHOD.
+ METHOD zif_abapgit_log~merge_with.
+
+ DATA lo_log TYPE REF TO zcl_abapgit_log.
+ DATA lt_log_temp LIKE lo_log->mt_log.
+
+ IF ii_log IS BOUND.
+ lo_log ?= ii_log.
+ IF iv_min_level > 0.
+ lt_log_temp = lo_log->mt_log.
+ DELETE lt_log_temp WHERE msg-level < iv_min_level.
+ APPEND LINES OF lt_log_temp TO mt_log.
+ ELSE.
+ APPEND LINES OF lo_log->mt_log TO mt_log.
+ ENDIF.
+ ENDIF.
+
+ ri_log = me.
+
+ ENDMETHOD.
+ METHOD zif_abapgit_log~set_title.
+ mv_title = iv_title.
+ ri_log = me.
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS kHGwldKtJfHZXmphMQgfeIQhGnfrcH DEFINITION DEFERRED.
+CLASS kHGwldKtJfHZXmphMQgfcZaQwkuAox DEFINITION DEFERRED.
+CLASS kHGwldKtJfHZXmphMQgfQYNhjRNkGw DEFINITION DEFERRED.
+* renamed: zcl_abapgit_convert :: lcl_in
+CLASS kHGwldKtJfHZXmphMQgfQYNhjRNkGw DEFINITION.
+ PUBLIC SECTION.
+ CLASS-METHODS convert
+ IMPORTING
+ !iv_data TYPE xsequence
+ !iv_length TYPE i OPTIONAL
+ RETURNING
+ VALUE(rv_string) TYPE string
+ RAISING
+ zcx_abapgit_exception.
+ PRIVATE SECTION.
+ CLASS-DATA go_conv_new TYPE REF TO object.
+ CLASS-DATA go_conv_old TYPE REF TO object.
+ENDCLASS.
+
+CLASS kHGwldKtJfHZXmphMQgfQYNhjRNkGw IMPLEMENTATION.
+ METHOD convert.
+
+ DATA lv_class TYPE string.
+ DATA lx_error TYPE REF TO cx_root.
+
+ IF go_conv_new IS INITIAL AND go_conv_old IS INITIAL.
+ TRY.
+ CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
+ RECEIVING
+ instance = go_conv_new.
+ CATCH cx_sy_dyn_call_illegal_class.
+ lv_class = 'CL_ABAP_CONV_IN_CE'.
+ CALL METHOD (lv_class)=>create
+ EXPORTING
+ encoding = 'UTF-8'
+ RECEIVING
+ conv = go_conv_old.
+ ENDTRY.
+ ENDIF.
+
+ TRY.
+ IF go_conv_new IS NOT INITIAL.
+ CALL METHOD go_conv_new->('IF_ABAP_CONV_IN~CONVERT')
+ EXPORTING
+ source = iv_data
+ RECEIVING
+ result = rv_string.
+ ELSE.
+ CALL METHOD go_conv_old->('CONVERT')
+ EXPORTING
+ input = iv_data
+ n = iv_length
+ IMPORTING
+ data = rv_string.
+ ENDIF.
+ CATCH cx_parameter_invalid_range
+ cx_sy_codepage_converter_init
+ cx_sy_conversion_codepage
+ cx_parameter_invalid_type INTO lx_error.
+ zcx_abapgit_exception=>raise_with_text( lx_error ).
+ ENDTRY.
+
+ ENDMETHOD.
+ENDCLASS.
+
+* renamed: zcl_abapgit_convert :: lcl_out
+CLASS kHGwldKtJfHZXmphMQgfcZaQwkuAox DEFINITION.
+ PUBLIC SECTION.
+ CLASS-METHODS convert
+ IMPORTING
+ !iv_string TYPE string
+ RETURNING
+ VALUE(rv_xstring) TYPE xstring
+ RAISING
+ zcx_abapgit_exception.
+ PRIVATE SECTION.
+ CLASS-DATA go_conv_new TYPE REF TO object.
+ CLASS-DATA go_conv_old TYPE REF TO object.
+ENDCLASS.
+
+CLASS kHGwldKtJfHZXmphMQgfcZaQwkuAox IMPLEMENTATION.
+ METHOD convert.
+ DATA lx_error TYPE REF TO cx_root.
+ DATA lv_class TYPE string.
+
+ IF go_conv_new IS INITIAL AND go_conv_old IS INITIAL.
+ TRY.
+ CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_out
+ RECEIVING
+ instance = go_conv_new.
+ CATCH cx_sy_dyn_call_illegal_class.
+ lv_class = 'CL_ABAP_CONV_OUT_CE'.
+ CALL METHOD (lv_class)=>create
+ EXPORTING
+ encoding = 'UTF-8'
+ RECEIVING
+ conv = go_conv_old.
+ ENDTRY.
+ ENDIF.
+
+ TRY.
+ IF go_conv_new IS NOT INITIAL.
+ CALL METHOD go_conv_new->('IF_ABAP_CONV_OUT~CONVERT')
+ EXPORTING
+ source = iv_string
+ RECEIVING
+ result = rv_xstring.
+ ELSE.
+ CALL METHOD go_conv_old->('CONVERT')
+ EXPORTING
+ data = iv_string
+ IMPORTING
+ buffer = rv_xstring.
+ ENDIF.
+ CATCH cx_parameter_invalid_range
+ cx_sy_codepage_converter_init
+ cx_sy_conversion_codepage
+ cx_parameter_invalid_type INTO lx_error.
+ zcx_abapgit_exception=>raise_with_text( lx_error ).
+ ENDTRY.
+ ENDMETHOD.
+ENDCLASS.
+
+* renamed: zcl_abapgit_convert :: lcl_bcp47_language_table
+CLASS kHGwldKtJfHZXmphMQgfeIQhGnfrcH DEFINITION CREATE PRIVATE.
+
+ PUBLIC SECTION.
+ TYPES: BEGIN OF ty_language_mapping,
+ sap1_code TYPE sy-langu,
+ sap2_code TYPE laiso,
+ bcp47_code TYPE string,
+ text TYPE string,
+ END OF ty_language_mapping,
+ ty_language_mappings TYPE STANDARD TABLE OF ty_language_mapping WITH DEFAULT KEY.
+ CLASS-DATA gt_language_mappings TYPE ty_language_mappings.
+ CLASS-METHODS:
+ sap1_to_text
+ IMPORTING
+ im_sap1 TYPE sy-langu
+ RETURNING
+ VALUE(re_text) TYPE string,
+ sap1_to_sap2
+ IMPORTING
+ im_sap1 TYPE sy-langu
+ RETURNING
+ VALUE(re_sap2) TYPE laiso
+ RAISING
+ zcx_abapgit_exception,
+ sap2_to_sap1
+ IMPORTING
+ im_sap2 TYPE laiso
+ RETURNING
+ VALUE(re_sap1) TYPE sy-langu
+ RAISING
+ zcx_abapgit_exception,
+ sap1_to_bcp47
+ IMPORTING
+ im_sap1 TYPE sy-langu
+ RETURNING
+ VALUE(re_bcp47) TYPE string
+ RAISING
+ zcx_abapgit_exception,
+ bcp47_to_sap1
+ IMPORTING
+ im_bcp47 TYPE string
+ RETURNING
+ VALUE(re_sap1) TYPE sy-langu
+ RAISING
+ zcx_abapgit_exception.
+ PROTECTED SECTION.
+ PRIVATE SECTION.
+ CLASS-METHODS fill_language_mappings.
+ CLASS-METHODS
+ fill_language_mapping
+ IMPORTING
+ im_sap1 TYPE string
+ im_sap2 TYPE string
+ im_bcp47 TYPE string
+ iv_text TYPE string OPTIONAL.
+
+ENDCLASS.
+
+CLASS kHGwldKtJfHZXmphMQgfeIQhGnfrcH IMPLEMENTATION.
+
+ METHOD sap1_to_bcp47.
+ DATA lv_language_mapping TYPE ty_language_mapping.
+
+ IF gt_language_mappings IS INITIAL OR lines( gt_language_mappings ) = 0.
+ fill_language_mappings( ).
+ ENDIF.
+
+ LOOP AT gt_language_mappings INTO lv_language_mapping WHERE sap1_code = im_sap1.
+ IF re_bcp47 IS INITIAL OR strlen( re_bcp47 ) > strlen( lv_language_mapping-bcp47_code ).
+ re_bcp47 = lv_language_mapping-bcp47_code.
+ ENDIF.
+ ENDLOOP.
+
+ IF re_bcp47 IS INITIAL.
+ zcx_abapgit_exception=>raise( |Could not map SAP1 language code { im_sap1 } to BCP47 language code.| ).
+ ENDIF.
+ ENDMETHOD.
+
+ METHOD bcp47_to_sap1.
+ DATA lv_language_mapping TYPE ty_language_mapping.
+
+ IF gt_language_mappings IS INITIAL OR lines( gt_language_mappings ) = 0.
+ fill_language_mappings( ).
+ ENDIF.
+
+ LOOP AT gt_language_mappings INTO lv_language_mapping.
+ IF to_lower( lv_language_mapping-bcp47_code ) = to_lower( im_bcp47 ) AND re_sap1 IS INITIAL.
+ re_sap1 = lv_language_mapping-sap1_code.
+ ENDIF.
+ ENDLOOP.
+
+ IF re_sap1 IS INITIAL.
+ zcx_abapgit_exception=>raise( |Could not map BCP47 language code { im_bcp47 } to SAP1 language code.| ).
+ ENDIF.
+ ENDMETHOD.
+
+ METHOD sap1_to_text.
+ DATA lv_language_mapping TYPE ty_language_mapping.
+
+ IF gt_language_mappings IS INITIAL.
+ fill_language_mappings( ).
+ ENDIF.
+
+ READ TABLE gt_language_mappings WITH KEY sap1_code = im_sap1 INTO lv_language_mapping.
+ IF sy-subrc = 0.
+ re_text = lv_language_mapping-text.
+ ELSE.
+ re_text = 'Unknonw language'.
+ ENDIF.
+ ENDMETHOD.
+
+ METHOD sap1_to_sap2.
+ DATA lv_language_mapping TYPE ty_language_mapping.
+
+ IF gt_language_mappings IS INITIAL.
+ fill_language_mappings( ).
+ ENDIF.
+
+ READ TABLE gt_language_mappings WITH KEY sap1_code = im_sap1 INTO lv_language_mapping.
+ re_sap2 = lv_language_mapping-sap2_code.
+
+ IF re_sap2 IS INITIAL.
+ zcx_abapgit_exception=>raise( |Could not map SAP1 language code { im_sap1 } to SAP2 language code.| ).
+ ENDIF.
+ ENDMETHOD.
+
+ METHOD sap2_to_sap1.
+ DATA lv_language_mapping TYPE ty_language_mapping.
+
+ IF gt_language_mappings IS INITIAL.
+ fill_language_mappings( ).
+ ENDIF.
+
+ READ TABLE gt_language_mappings WITH KEY sap2_code = im_sap2 INTO lv_language_mapping.
+ re_sap1 = lv_language_mapping-sap1_code.
+
+ IF re_sap1 IS INITIAL.
+ zcx_abapgit_exception=>raise( |Could not map SAP2 language code { im_sap2 } to SAP1 language code.| ).
+ ENDIF.
+ ENDMETHOD.
+
+ METHOD fill_language_mapping.
+ DATA lv_line TYPE ty_language_mapping.
+ DATA lv_sap1 TYPE sy-langu.
+
+ IF strlen( im_sap1 ) = 4.
+ TRY.
+ lv_sap1 = zcl_abapgit_convert=>uccp( im_sap1 ).
+ CATCH cx_root.
+ " Language is not supported in this system -> ignore it
+ " Should someone try to use the language in a repo, it will result in an error (see above)
+ RETURN.
+ ENDTRY.
+ ELSEIF strlen( im_sap1 ) = 1.
+ lv_sap1 = im_sap1.
+ ENDIF.
+
+ lv_line-bcp47_code = im_bcp47.
+ lv_line-sap2_code = im_sap2.
+ lv_line-sap1_code = lv_sap1.
+ lv_line-text = iv_text.
+
+ APPEND lv_line TO gt_language_mappings.
+ CLEAR lv_line.
+ ENDMETHOD.
+
+ METHOD fill_language_mappings.
+ fill_language_mapping( im_sap1 = 'a'
+ im_sap2 = 'AF'
+ im_bcp47 = 'af'
+ iv_text = 'Afrikaans' ).
+
+ fill_language_mapping( im_sap1 = 'BF51'
+ im_sap2 = 'SQ'
+ im_bcp47 = 'sq'
+ iv_text = 'Albanian' ).
+
+ fill_language_mapping( im_sap1 = 'A'
+ im_sap2 = 'AR'
+ im_bcp47 = 'ar-SA'
+ iv_text = 'Arabic' ).
+
+ fill_language_mapping( im_sap1 = 'BA15'
+ im_sap2 = 'EU'
+ im_bcp47 = 'eu'
+ iv_text = 'Basque' ).
+
+ fill_language_mapping( im_sap1 = 'B8F3'
+ im_sap2 = 'BS'
+ im_bcp47 = 'bs'
+ iv_text = 'Bosnian' ).
+
+ fill_language_mapping( im_sap1 = 'W'
+ im_sap2 = 'BG'
+ im_bcp47 = 'bg'
+ iv_text = 'Bulgarian' ).
+
+ fill_language_mapping( im_sap1 = 'c'
+ im_sap2 = 'CA'
+ im_bcp47 = 'ca'
+ iv_text = 'Catalan' ).
+
+ fill_language_mapping( im_sap1 = '1'
+ im_sap2 = 'ZH'
+ im_bcp47 = 'zh'
+ iv_text = 'Chinese' ).
+
+ fill_language_mapping( im_sap1 = '1'
+ im_sap2 = 'ZH'
+ im_bcp47 = 'zh-Hans'
+ iv_text = 'Chinese (Simplified)' ).
+
+ fill_language_mapping( im_sap1 = 'B343'
+ im_sap2 = '3C'
+ im_bcp47 = 'zh-SG'
+ iv_text = 'Chinese (Singapore)' ).
+
+ fill_language_mapping( im_sap1 = 'M'
+ im_sap2 = 'ZF'
+ im_bcp47 = 'zh-Hant'
+ iv_text = 'Chinese (Traditional)' ).
+
+ fill_language_mapping( im_sap1 = '6'
+ im_sap2 = 'HR'
+ im_bcp47 = 'hr'
+ iv_text = 'Croatian' ).
+
+ fill_language_mapping( im_sap1 = 'C'
+ im_sap2 = 'CS'
+ im_bcp47 = 'cs'
+ iv_text = 'Czech' ).
+
+ fill_language_mapping( im_sap1 = 'K'
+ im_sap2 = 'DA'
+ im_bcp47 = 'da'
+ iv_text = 'Danish' ).
+
+ fill_language_mapping( im_sap1 = 'N'
+ im_sap2 = 'NL'
+ im_bcp47 = 'nl'
+ iv_text = 'Dutch' ).
+
+ fill_language_mapping( im_sap1 = 'N'
+ im_sap2 = 'NL'
+ im_bcp47 = 'nl-NL'
+ iv_text = 'Dutch' ).
+
+ fill_language_mapping( im_sap1 = 'B284'
+ im_sap2 = '1D'
+ im_bcp47 = 'nl-BE'
+ iv_text = 'Dutch (Belgium)' ).
+
+ fill_language_mapping( im_sap1 = 'E'
+ im_sap2 = 'EN'
+ im_bcp47 = 'en'
+ iv_text = 'English' ).
+
+ fill_language_mapping( im_sap1 = 'E'
+ im_sap2 = 'EN'
+ im_bcp47 = 'en-US'
+ iv_text = 'English (American)' ).
+
+ fill_language_mapping( im_sap1 = 'B46E'
+ im_sap2 = '6N'
+ im_bcp47 = 'en-GB'
+ iv_text = 'English (British)' ).
+
+ fill_language_mapping( im_sap1 = 'B285'
+ im_sap2 = '1E'
+ im_bcp47 = 'en-AU'
+ iv_text = 'English (Australia)' ).
+
+ fill_language_mapping( im_sap1 = 'B2E5'
+ im_sap2 = '2E'
+ im_bcp47 = 'en-BZ'
+ iv_text = 'English (Belize)' ).
+
+ fill_language_mapping( im_sap1 = 'B345'
+ im_sap2 = '3E'
+ im_bcp47 = 'en-CA'
+ iv_text = 'English (Canada)' ).
+
+ fill_language_mapping( im_sap1 = 'B405'
+ im_sap2 = '5E'
+ im_bcp47 = 'en-HK'
+ iv_text = 'English (Hong Kong SAR China)' ).
+
+ fill_language_mapping( im_sap1 = 'B465'
+ im_sap2 = '6E'
+ im_bcp47 = 'en-IN'
+ iv_text = 'English (India)' ).
+
+ fill_language_mapping( im_sap1 = 'B4C5'
+ im_sap2 = '7E'
+ im_bcp47 = 'en-ID'
+ iv_text = 'English' ).
+
+ fill_language_mapping( im_sap1 = 'B525'
+ im_sap2 = '8E'
+ im_bcp47 = 'en-IE'
+ iv_text = 'English (Ireland)' ).
+
+ fill_language_mapping( im_sap1 = 'B585'
+ im_sap2 = '9E'
+ im_bcp47 = 'en-JM'
+ iv_text = 'English (Jamaica)' ).
+
+ fill_language_mapping( im_sap1 = 'B225'
+ im_sap2 = '0E'
+ im_bcp47 = 'en-MY'
+ iv_text = 'English (Malaysia)' ).
+
+ fill_language_mapping( im_sap1 = 'B28E'
+ im_sap2 = '1N'
+ im_bcp47 = 'en-NZ'
+ iv_text = 'English (New Zealand)' ).
+
+ fill_language_mapping( im_sap1 = 'B2EE'
+ im_sap2 = '2N'
+ im_bcp47 = 'en-PH'
+ iv_text = 'English (Philippines)' ).
+
+ fill_language_mapping( im_sap1 = 'B34E'
+ im_sap2 = '3N'
+ im_bcp47 = 'en-SG'
+ iv_text = 'English (Singapore)' ).
+
+ fill_language_mapping( im_sap1 = 'B3AE'
+ im_sap2 = '4N'
+ im_bcp47 = 'en-ZA'
+ iv_text = 'English (South Africa)' ).
+
+ fill_language_mapping( im_sap1 = 'B40E'
+ im_sap2 = '5N'
+ im_bcp47 = 'en-TT'
+ iv_text = 'English (Trinidad & Tobago)' ).
+
+ fill_language_mapping( im_sap1 = 'B4CE'
+ im_sap2 = '7N'
+ im_bcp47 = 'en-ZW'
+ iv_text = 'English (Zimbabwe)' ).
+
+ fill_language_mapping( im_sap1 = '9'
+ im_sap2 = 'ET'
+ im_bcp47 = 'et'
+ iv_text = 'Estonian' ).
+
+ fill_language_mapping( im_sap1 = 'U'
+ im_sap2 = 'FI'
+ im_bcp47 = 'fi'
+ iv_text = 'Finnish' ).
+
+ fill_language_mapping( im_sap1 = 'F'
+ im_sap2 = 'FR'
+ im_bcp47 = 'fr'
+ iv_text = 'French' ).
+
+ fill_language_mapping( im_sap1 = 'F'
+ im_sap2 = 'FR'
+ im_bcp47 = 'fr-FR'
+ iv_text = 'French' ).
+
+ fill_language_mapping( im_sap1 = 'B286'
+ im_sap2 = '1F'
+ im_bcp47 = 'fr-BE'
+ iv_text = 'French (Belgium)' ).
+
+ fill_language_mapping( im_sap1 = 'B2E6'
+ im_sap2 = '2F'
+ im_bcp47 = 'fr-CM'
+ iv_text = 'French (Cameroon)' ).
+
+ fill_language_mapping( im_sap1 = 'B346'
+ im_sap2 = '3F'
+ im_bcp47 = 'fr-CA'
+ iv_text = 'French (Canada)' ).
+
+ fill_language_mapping( im_sap1 = 'B3A6'
+ im_sap2 = '4F'
+ im_bcp47 = 'fr-CG'
+ iv_text = 'French (Congo-Brazzaville)' ).
+
+ fill_language_mapping( im_sap1 = 'B406'
+ im_sap2 = '5F'
+ im_bcp47 = 'fr-CI'
+ iv_text = 'French (Cote d''Ivoire)' ).
+
+ fill_language_mapping( im_sap1 = 'B466'
+ im_sap2 = '6F'
+ im_bcp47 = 'fr-HT'
+ iv_text = 'French (Haiti)' ).
+
+ fill_language_mapping( im_sap1 = 'B4C6'
+ im_sap2 = '7F'
+ im_bcp47 = 'fr-LU'
+ iv_text = 'French (Luxembourg)' ).
+
+ fill_language_mapping( im_sap1 = 'B526'
+ im_sap2 = '8F'
+ im_bcp47 = 'fr-ML'
+ iv_text = 'French (Mali)' ).
+
+ fill_language_mapping( im_sap1 = 'B586'
+ im_sap2 = '9F'
+ im_bcp47 = 'fr-MC'
+ iv_text = 'French (Monaco)' ).
+
+ fill_language_mapping( im_sap1 = 'B288'
+ im_sap2 = '1H'
+ im_bcp47 = 'fr-MA'
+ iv_text = 'French (Morocco)' ).
+
+ fill_language_mapping( im_sap1 = 'B2E8'
+ im_sap2 = '2H'
+ im_bcp47 = 'fr-RE'
+ iv_text = 'French (Reunion)' ).
+
+ fill_language_mapping( im_sap1 = 'B348'
+ im_sap2 = '3H'
+ im_bcp47 = 'fr-SN'
+ iv_text = 'French (Senegal)' ).
+
+ fill_language_mapping( im_sap1 = 'B3A8'
+ im_sap2 = '4H'
+ im_bcp47 = 'fr-CH'
+ iv_text = 'French (Switzerland)' ).
+
+ fill_language_mapping( im_sap1 = 'BAC4'
+ im_sap2 = 'GD'
+ im_bcp47 = 'gd'
+ iv_text = 'Scottish Gaelic' ).
+
+ fill_language_mapping( im_sap1 = 'BACC'
+ im_sap2 = 'GL'
+ im_bcp47 = 'gl'
+ iv_text = 'Galician' ).
+
+ fill_language_mapping( im_sap1 = 'D'
+ im_sap2 = 'DE'
+ im_bcp47 = 'de'
+ iv_text = 'German' ).
+
+ fill_language_mapping( im_sap1 = 'D'
+ im_sap2 = 'DE'
+ im_bcp47 = 'de-DE'
+ iv_text = 'German' ).
+
+ fill_language_mapping( im_sap1 = 'B287'
+ im_sap2 = '1G'
+ im_bcp47 = 'de-AT'
+ iv_text = 'German (Austria)' ).
+
+ fill_language_mapping( im_sap1 = 'B2E7'
+ im_sap2 = '2G'
+ im_bcp47 = 'de-LI'
+ iv_text = 'German (Liechtenstein)' ).
+
+ fill_language_mapping( im_sap1 = 'B347'
+ im_sap2 = '3G'
+ im_bcp47 = 'de-LU'
+ iv_text = 'German (Luxembourg)' ).
+
+ fill_language_mapping( im_sap1 = 'B3A7'
+ im_sap2 = '4G'
+ im_bcp47 = 'de-CH'
+ iv_text = 'German (Switzerland)' ).
+
+ fill_language_mapping( im_sap1 = 'G'
+ im_sap2 = 'EL'
+ im_bcp47 = 'el'
+ iv_text = 'Greek' ).
+
+ fill_language_mapping( im_sap1 = 'B'
+ im_sap2 = 'HE'
+ im_bcp47 = 'he'
+ iv_text = 'Hebrew' ).
+
+ fill_language_mapping( im_sap1 = 'BB29'
+ im_sap2 = 'HI'
+ im_bcp47 = 'hi'
+ iv_text = 'Hindi' ).
+
+ fill_language_mapping( im_sap1 = 'H'
+ im_sap2 = 'HU'
+ im_bcp47 = 'hu'
+ iv_text = 'Hungarian' ).
+
+ fill_language_mapping( im_sap1 = 'b'
+ im_sap2 = 'IS'
+ im_bcp47 = 'is'
+ iv_text = 'Icelandic' ).
+
+ fill_language_mapping( im_sap1 = 'i'
+ im_sap2 = 'ID'
+ im_bcp47 = 'id'
+ iv_text = 'Indonesian' ).
+
+ fill_language_mapping( im_sap1 = 'BAC1'
+ im_sap2 = 'GA'
+ im_bcp47 = 'ga'
+ iv_text = 'Irish' ).
+
+ fill_language_mapping( im_sap1 = 'I'
+ im_sap2 = 'IT'
+ im_bcp47 = 'it'
+ iv_text = 'Italian' ).
+
+ fill_language_mapping( im_sap1 = 'I'
+ im_sap2 = 'IT'
+ im_bcp47 = 'it-IT'
+ iv_text = 'Italian' ).
+
+ fill_language_mapping( im_sap1 = 'B289'
+ im_sap2 = '1I'
+ im_bcp47 = 'it-CH'
+ iv_text = 'Italian (Swiss)' ).
+
+ fill_language_mapping( im_sap1 = 'J'
+ im_sap2 = 'JA'
+ im_bcp47 = 'ja'
+ iv_text = 'Japanese' ).
+
+ fill_language_mapping( im_sap1 = '3'
+ im_sap2 = 'KO'
+ im_bcp47 = 'ko'
+ iv_text = 'Korean' ).
+
+ fill_language_mapping( im_sap1 = '3'
+ im_sap2 = 'KO'
+ im_bcp47 = 'ko-KR'
+ iv_text = 'Korean' ).
+
+ fill_language_mapping( im_sap1 = 'Y'
+ im_sap2 = 'LV'
+ im_bcp47 = 'lv'
+ iv_text = 'Latvian' ).
+
+ fill_language_mapping( im_sap1 = 'X'
+ im_sap2 = 'LT'
+ im_bcp47 = 'lt'
+ iv_text = 'Lithuanian' ).
+
+ fill_language_mapping( im_sap1 = '7'
+ im_sap2 = 'MS'
+ im_bcp47 = 'ms'
+ iv_text = 'Malay' ).
+
+ fill_language_mapping( im_sap1 = '7'
+ im_sap2 = 'MS'
+ im_bcp47 = 'ms-MY'
+ iv_text = 'Malay' ).
+
+ fill_language_mapping( im_sap1 = 'B28D'
+ im_sap2 = '1M'
+ im_bcp47 = 'ms-BN'
+ iv_text = 'Malay (Brunei)' ).
+
+ fill_language_mapping( im_sap1 = 'O'
+ im_sap2 = 'NO'
+ im_bcp47 = 'no'
+ iv_text = 'Norwegian' ).
+
+ fill_language_mapping( im_sap1 = 'L'
+ im_sap2 = 'PL'
+ im_bcp47 = 'pl'
+ iv_text = 'Polish' ).
+
+ fill_language_mapping( im_sap1 = 'P'
+ im_sap2 = 'PT'
+ im_bcp47 = 'pt'
+ iv_text = 'Portuguese' ).
+
+ fill_language_mapping( im_sap1 = 'P'
+ im_sap2 = 'PT'
+ im_bcp47 = 'pt-BR'
+ iv_text = 'Portuguese' ).
+
+ fill_language_mapping( im_sap1 = 'BEED'
+ im_sap2 = 'RM'
+ im_bcp47 = 'rm'
+ iv_text = 'Romansh' ).
+
+ fill_language_mapping( im_sap1 = '4'
+ im_sap2 = 'RO'
+ im_bcp47 = 'ro'
+ iv_text = 'Romanian' ).
+
+ fill_language_mapping( im_sap1 = '4'
+ im_sap2 = 'RO'
+ im_bcp47 = 'ro-RO'
+ iv_text = 'Romanian' ).
+
+ fill_language_mapping( im_sap1 = 'R'
+ im_sap2 = 'RU'
+ im_bcp47 = 'ru-RU'
+ iv_text = 'Russian' ).
+
+ fill_language_mapping( im_sap1 = '0'
+ im_sap2 = 'SR'
+ im_bcp47 = 'sr'
+ iv_text = 'Serbian' ).
+
+ fill_language_mapping( im_sap1 = '0'
+ im_sap2 = 'SR'
+ im_bcp47 = 'sr-Cyrl'
+ iv_text = 'Serbian' ).
+
+ fill_language_mapping( im_sap1 = 'd'
+ im_sap2 = 'SH'
+ im_bcp47 = 'sr-Latn'
+ iv_text = 'Serbian (Latin)' ).
+
+ fill_language_mapping( im_sap1 = 'Q'
+ im_sap2 = 'SK'
+ im_bcp47 = 'sk'
+ iv_text = 'Slovak' ).
+
+ fill_language_mapping( im_sap1 = '5'
+ im_sap2 = 'SL'
+ im_bcp47 = 'sl'
+ iv_text = 'Slovenian' ).
+
+ fill_language_mapping( im_sap1 = 'BF42'
+ im_sap2 = 'SB'
+ im_bcp47 = 'wen'
+ iv_text = '' ).
+
+ fill_language_mapping( im_sap1 = 'B9B3'
+ im_sap2 = 'DS'
+ im_bcp47 = 'dsb'
+ iv_text = '' ).
+
+ fill_language_mapping( im_sap1 = 'BB33'
+ im_sap2 = 'HS'
+ im_bcp47 = 'hsb'
+ iv_text = '' ).
+
+ fill_language_mapping( im_sap1 = 'S'
+ im_sap2 = 'ES'
+ im_bcp47 = 'es'
+ iv_text = 'Spanish' ).
+
+ fill_language_mapping( im_sap1 = 'S'
+ im_sap2 = 'ES'
+ im_bcp47 = 'es-ES'
+ iv_text = 'Spanish' ).
+
+ fill_language_mapping( im_sap1 = 'B293'
+ im_sap2 = '1S'
+ im_bcp47 = 'es-AR'
+ iv_text = 'Spanish (Argentina)' ).
+
+ fill_language_mapping( im_sap1 = 'B2F3'
+ im_sap2 = '2S'
+ im_bcp47 = 'es-BO'
+ iv_text = 'Spanish (Bolivia)' ).
+
+ fill_language_mapping( im_sap1 = 'B353'
+ im_sap2 = '3S'
+ im_bcp47 = 'es-CL'
+ iv_text = 'Spanish (Chile)' ).
+
+ fill_language_mapping( im_sap1 = 'B233'
+ im_sap2 = '0S'
+ im_bcp47 = 'es-CO'
+ iv_text = 'Spanish (Colombia)' ).
+
+ fill_language_mapping( im_sap1 = 'B3B3'
+ im_sap2 = '4S'
+ im_bcp47 = 'es-CR'
+ iv_text = 'Spanish (Costa Rica)' ).
+
+ fill_language_mapping( im_sap1 = 'B413'
+ im_sap2 = '5S'
+ im_bcp47 = 'es-DO'
+ iv_text = 'Spanish (Dominican Republic)' ).
+
+ fill_language_mapping( im_sap1 = 'B473'
+ im_sap2 = '6S'
+ im_bcp47 = 'es-EC'
+ iv_text = 'Spanish (Ecuador)' ).
+
+ fill_language_mapping( im_sap1 = 'B4D3'
+ im_sap2 = '7S'
+ im_bcp47 = 'es-SV'
+ iv_text = 'Spanish (El Salvador)' ).
+
+ fill_language_mapping( im_sap1 = 'B533'
+ im_sap2 = '8S'
+ im_bcp47 = 'es-GT'
+ iv_text = 'Spanish (Guatemala)' ).
+
+ fill_language_mapping( im_sap1 = 'B593'
+ im_sap2 = '9S'
+ im_bcp47 = 'es-HN'
+ iv_text = 'Spanish (Honduras)' ).
+
+ fill_language_mapping( im_sap1 = 'B298'
+ im_sap2 = '1X'
+ im_bcp47 = 'es-MX'
+ iv_text = 'Spanish (Mexico)' ).
+
+ fill_language_mapping( im_sap1 = 'B2F8'
+ im_sap2 = '2X'
+ im_bcp47 = 'es-NI'
+ iv_text = 'Spanish (Nicaragua)' ).
+
+ fill_language_mapping( im_sap1 = 'B358'
+ im_sap2 = '3X'
+ im_bcp47 = 'es-PA'
+ iv_text = 'Spanish (Panama)' ).
+
+ fill_language_mapping( im_sap1 = 'B3B8'
+ im_sap2 = '4X'
+ im_bcp47 = 'es-PY'
+ iv_text = 'Spanish (Paraguay)' ).
+
+ fill_language_mapping( im_sap1 = 'B418'
+ im_sap2 = '5X'
+ im_bcp47 = 'es-PE'
+ iv_text = 'Spanish (Peru)' ).
+
+ fill_language_mapping( im_sap1 = 'B478'
+ im_sap2 = '6X'
+ im_bcp47 = 'es-PR'
+ iv_text = 'Spanish (Puerto Rico)' ).
+
+ fill_language_mapping( im_sap1 = 'B4D8'
+ im_sap2 = '7X'
+ im_bcp47 = 'es-UY'
+ iv_text = 'Spanish (Uruguay)' ).
+
+ fill_language_mapping( im_sap1 = 'B538'
+ im_sap2 = '8X'
+ im_bcp47 = 'es-VE'
+ iv_text = 'Spanish (Venezuela)' ).
+
+ fill_language_mapping( im_sap1 = 'BF57'
+ im_sap2 = 'SW'
+ im_bcp47 = 'sw'
+ iv_text = 'Swahili' ).
+
+ fill_language_mapping( im_sap1 = 'V'
+ im_sap2 = 'SV'
+ im_bcp47 = 'sv'
+ iv_text = 'Swedish' ).
+
+ fill_language_mapping( im_sap1 = 'BFAC'
+ im_sap2 = 'TL'
+ im_bcp47 = 'tl'
+ iv_text = 'Tagalog' ).
+
+ fill_language_mapping( im_sap1 = '2'
+ im_sap2 = 'TH'
+ im_bcp47 = 'th'
+ iv_text = 'Thai' ).
+
+ fill_language_mapping( im_sap1 = 'T'
+ im_sap2 = 'TR'
+ im_bcp47 = 'tr'
+ iv_text = 'Turkish' ).
+
+ fill_language_mapping( im_sap1 = '8'
+ im_sap2 = 'UK'
+ im_bcp47 = 'uk'
+ iv_text = 'Ukrainian' ).
+
+ fill_language_mapping( im_sap1 = 'C069'
+ im_sap2 = 'VI'
+ im_bcp47 = 'vi'
+ iv_text = 'Vietnamese' ).
+
+ fill_language_mapping( im_sap1 = 'C0C1'
+ im_sap2 = 'WA'
+ im_bcp47 = 'wa'
+ iv_text = 'Wa' ).
+
+ fill_language_mapping( im_sap1 = 'Z'
+ im_sap2 = 'Z1'
+ im_bcp47 = 'z1'
+ iv_text = 'Customer reserve' ).
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS zcl_abapgit_convert IMPLEMENTATION.
+ METHOD base64_to_xstring.
+
+ rv_xstr = cl_http_utility=>decode_x_base64( iv_base64 ).
+
+ ENDMETHOD.
+ METHOD bitbyte_to_int.
+
+ DATA: lv_bitbyte TYPE string,
+ lv_len TYPE i,
+ lv_offset TYPE i.
+
+ lv_bitbyte = iv_bits.
+ SHIFT lv_bitbyte LEFT DELETING LEADING '0 '.
+ lv_len = strlen( lv_bitbyte ).
+ lv_offset = lv_len - 1.
+
+ rv_int = 0.
+ DO lv_len TIMES.
+
+ IF sy-index = 1.
+ "Initialize
+ IF lv_bitbyte+lv_offset(1) = '1'.
+ rv_int = 1.
+ ENDIF.
+ ELSEIF lv_bitbyte+lv_offset(1) = '1'.
+ rv_int = rv_int + ( 2 ** ( sy-index - 1 ) ).
+ ENDIF.
+
+ lv_offset = lv_offset - 1. "Move Cursor
+
+ ENDDO.
+
+ ENDMETHOD.
+ METHOD conversion_exit_isola_output.
+
+ language_sap1_to_sap2(
+ EXPORTING
+ im_lang_sap1 = iv_spras
+ RECEIVING
+ re_lang_sap2 = rv_spras
+ EXCEPTIONS
+ no_assignment = 1
+ OTHERS = 2 ). "#EC CI_SUBRC
+
+ TRANSLATE rv_spras TO UPPER CASE.
+
+ ENDMETHOD.
+ METHOD int_to_xstring4.
+* returns xstring of length 4 containing the integer value iv_i
+
+ DATA lv_x TYPE x LENGTH 4.
+
+ lv_x = iv_i.
+ rv_xstring = lv_x.
+
+ ENDMETHOD.
+ METHOD language_bcp47_to_sap1.
+ DATA lv_converter_instance TYPE REF TO object.
+ DATA lv_converter_class_name TYPE string VALUE `CL_AFF_LANGUAGE_CONVERTER`.
+ DATA lv_regex TYPE REF TO cl_abap_regex.
+ DATA lv_abap_matcher TYPE REF TO cl_abap_matcher.
+
+ DATA lv_sap2_lang_code TYPE laiso.
+
+ TRY.
+ CALL METHOD (lv_converter_class_name)=>create_instance
+ RECEIVING
+ result = lv_converter_instance.
+
+ TRY.
+ CALL METHOD lv_converter_instance->(`IF_AFF_LANGUAGE_CONVERTER~BCP47_TO_SAP1`)
+ EXPORTING
+ language = im_lang_bcp47
+ RECEIVING
+ result = re_lang_sap1.
+
+ CATCH cx_static_check.
+ RAISE no_assignment.
+ ENDTRY.
+
+ CATCH cx_sy_dyn_call_error.
+ TRY.
+ re_lang_sap1 = kHGwldKtJfHZXmphMQgfeIQhGnfrcH=>bcp47_to_sap1( im_lang_bcp47 ).
+ CATCH zcx_abapgit_exception.
+
+ CREATE OBJECT lv_regex EXPORTING pattern = `[A-Z0-9]{2}`.
+ lv_abap_matcher = lv_regex->create_matcher( text = im_lang_bcp47 ).
+
+ IF abap_true = lv_abap_matcher->match( ).
+ "Fallback try to convert from SAP language
+ lv_sap2_lang_code = im_lang_bcp47.
+
+ language_sap2_to_sap1(
+ EXPORTING
+ im_lang_sap2 = lv_sap2_lang_code
+ RECEIVING
+ re_lang_sap1 = re_lang_sap1
+ EXCEPTIONS
+ no_assignment = 1
+ OTHERS = 2 ).
+ IF sy-subrc <> 0.
+ RAISE no_assignment.
+ ENDIF.
+
+ ELSE.
+ RAISE no_assignment.
+ ENDIF.
+ ENDTRY.
+ ENDTRY.
+ ENDMETHOD.
+ METHOD language_sap1_to_bcp47.
+ DATA lv_converter_instance TYPE REF TO object.
+ DATA lv_converter_class_name TYPE string VALUE `CL_AFF_LANGUAGE_CONVERTER`.
+
+ TRY.
+ CALL METHOD (lv_converter_class_name)=>create_instance
+ RECEIVING
+ result = lv_converter_instance.
+
+ TRY.
+ CALL METHOD lv_converter_instance->(`IF_AFF_LANGUAGE_CONVERTER~SAP1_TO_BCP47`)
+ EXPORTING
+ language = im_lang_sap1
+ RECEIVING
+ result = re_lang_bcp47.
+ CATCH cx_static_check.
+ RAISE no_assignment.
+ ENDTRY.
+ CATCH cx_sy_dyn_call_error.
+ TRY.
+ re_lang_bcp47 = kHGwldKtJfHZXmphMQgfeIQhGnfrcH=>sap1_to_bcp47( im_lang_sap1 ).
+ CATCH zcx_abapgit_exception.
+ RAISE no_assignment.
+ ENDTRY.
+ ENDTRY.
+ ENDMETHOD.
+ METHOD language_sap1_to_sap2.
+
+ TRY.
+ re_lang_sap2 = kHGwldKtJfHZXmphMQgfeIQhGnfrcH=>sap1_to_sap2( im_lang_sap1 ).
+ CATCH zcx_abapgit_exception.
+ RAISE no_assignment.
+ ENDTRY.
+
+ ENDMETHOD.
+ METHOD language_sap1_to_text.
+ re_text = kHGwldKtJfHZXmphMQgfeIQhGnfrcH=>sap1_to_text( im_lang_sap1 ).
+ ENDMETHOD.
+ METHOD language_sap2_to_sap1.
+
+ TRY.
+ re_lang_sap1 = kHGwldKtJfHZXmphMQgfeIQhGnfrcH=>sap2_to_sap1( im_lang_sap2 ).
+ CATCH zcx_abapgit_exception.
+ RAISE no_assignment.
+ ENDTRY.
+
+ ENDMETHOD.
+ METHOD split_string.
+
+ FIND FIRST OCCURRENCE OF cl_abap_char_utilities=>cr_lf IN iv_string.
+
+ " Convert string into table depending on separator type CR_LF vs. LF
+ IF sy-subrc = 0.
+ SPLIT iv_string AT cl_abap_char_utilities=>cr_lf INTO TABLE rt_lines.
+ ELSE.
+ SPLIT iv_string AT cl_abap_char_utilities=>newline INTO TABLE rt_lines.
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD string_to_tab.
+
+ DATA lv_length TYPE i.
+ DATA lv_iterations TYPE i.
+ DATA lv_offset TYPE i.
+
+ FIELD-SYMBOLS TYPE any.
+ CLEAR et_tab.
+ ev_size = strlen( iv_str ).
+
+ APPEND INITIAL LINE TO et_tab ASSIGNING .
+ = iv_str.
+ lv_length = cl_abap_typedescr=>describe_by_data( )->length / cl_abap_char_utilities=>charsize.
+ lv_iterations = ev_size DIV lv_length.
+
+ DO lv_iterations TIMES.
+ lv_offset = sy-index * lv_length.
+ APPEND INITIAL LINE TO et_tab ASSIGNING .
+ = iv_str+lv_offset.
+ ENDDO.
+
+ ENDMETHOD.
+ METHOD string_to_xstring.
+
+ rv_xstr = string_to_xstring_utf8( iv_str ).
+
+ ENDMETHOD.
+ METHOD string_to_xstring_utf8.
+
+ rv_xstring = kHGwldKtJfHZXmphMQgfcZaQwkuAox=>convert( iv_string ).
+
+ ENDMETHOD.
+ METHOD string_to_xstring_utf8_bom.
+
+ IF iv_string IS INITIAL.
+ RETURN.
+ ENDIF.
+
+ rv_xstring = string_to_xstring_utf8( iv_string ).
+
+ " Add UTF-8 BOM
+ IF xstrlen( rv_xstring ) < 3 OR rv_xstring(3) <> cl_abap_char_utilities=>byte_order_mark_utf8.
+ rv_xstring = cl_abap_char_utilities=>byte_order_mark_utf8 && rv_xstring.
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD uccp.
+
+ DATA lv_class TYPE string.
+ DATA lv_xstr TYPE xstring.
+ DATA lo_instance TYPE REF TO object.
+
+ lv_class = 'CL_ABAP_CONV_IN_CE'.
+
+ TRY.
+ CALL METHOD (lv_class)=>uccp
+ EXPORTING
+ uccp = iv_uccp
+ RECEIVING
+ char = rv_char.
+ CATCH cx_sy_dyn_call_illegal_class.
+ lv_xstr = iv_uccp.
+
+ CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
+ EXPORTING
+ codepage = 'UTF-16'
+ RECEIVING
+ instance = lo_instance.
+
+* convert endianness
+ CONCATENATE lv_xstr+1(1) lv_xstr(1) INTO lv_xstr IN BYTE MODE.
+
+ CALL METHOD lo_instance->('IF_ABAP_CONV_IN~CONVERT')
+ EXPORTING
+ source = lv_xstr
+ RECEIVING
+ result = rv_char.
+ ENDTRY.
+
+ ENDMETHOD.
+ METHOD xstring_remove_bom.
+
+ rv_xstr = iv_xstr.
+
+ " cl_abap_conv_in_ce does not handle BOM in non-Unicode systems, so we remove it
+ IF cl_abap_char_utilities=>charsize = 1 AND xstrlen( rv_xstr ) > 3
+ AND rv_xstr(3) = cl_abap_char_utilities=>byte_order_mark_utf8.
+
+ rv_xstr = rv_xstr+3.
+
+ ENDIF.
+
+ ENDMETHOD.
+ METHOD xstring_to_bintab.
+
+ DATA lv_length TYPE i.
+ DATA lv_iterations TYPE i.
+ DATA lv_offset TYPE i.
+ DATA lv_struct TYPE abap_bool.
+
+ FIELD-SYMBOLS TYPE any.
+
+ CLEAR et_bintab.
+ ev_size = xstrlen( iv_xstr ).
+
+ IF iv_xstr IS INITIAL.
+ RETURN.
+ ENDIF.
+
+ APPEND INITIAL LINE TO et_bintab ASSIGNING .
+ lv_struct = boolc(
+ cl_abap_typedescr=>describe_by_data( )->type_kind = cl_abap_typedescr=>typekind_struct1 ).
+ IF lv_struct = abap_true.
+ ASSIGN COMPONENT 1 OF STRUCTURE TO .
+ ENDIF.
+ = iv_xstr.
+
+ lv_length = cl_abap_typedescr=>describe_by_data( )->length.
+ ASSERT lv_length > 0.
+
+ lv_iterations = ( ev_size - 1 ) DIV lv_length.
+
+ DO lv_iterations TIMES.
+ lv_offset = sy-index * lv_length.
+ APPEND INITIAL LINE TO et_bintab ASSIGNING .
+ IF lv_struct = abap_true.
+ ASSIGN COMPONENT 1 OF STRUCTURE TO .
+ ENDIF.
+ = iv_xstr+lv_offset.
+ ENDDO.
+
+ ENDMETHOD.
+ METHOD xstring_to_int.
+
+* use the built-in type conversion
+ rv_i = iv_xstring.
+
+ ENDMETHOD.
+ METHOD xstring_to_string_utf8.
+
+ DATA lv_data TYPE xstring.
+ DATA lv_length TYPE i.
+
+ " Remove BOM for non-Unicode systems
+ lv_data = xstring_remove_bom( iv_data ).
+
+ lv_length = iv_length.
+ IF lv_length <= 0.
+ lv_length = xstrlen( lv_data ).
+ ENDIF.
+
+ rv_string = kHGwldKtJfHZXmphMQgfQYNhjRNkGw=>convert(
+ iv_data = lv_data
+ iv_length = lv_length ).
+
+ ENDMETHOD.
+ METHOD xstring_to_string_utf8_bom.
+
+ DATA lv_xstring TYPE xstring.
+
+ IF iv_xstring IS INITIAL.
+ RETURN.
+ ENDIF.
+
+ lv_xstring = iv_xstring.
+ " Add UTF-8 BOM
+ IF xstrlen( lv_xstring ) < 3 OR lv_xstring(3) <> cl_abap_char_utilities=>byte_order_mark_utf8.
+ lv_xstring = cl_abap_char_utilities=>byte_order_mark_utf8 && lv_xstring.
+ ENDIF.
+
+ rv_string = xstring_to_string_utf8( lv_xstring ).
+
+ ENDMETHOD.
+ METHOD x_to_bitbyte.
+
+ CLEAR rv_bitbyte.
+
+ GET BIT 1 OF iv_x INTO rv_bitbyte+0(1).
+ GET BIT 2 OF iv_x INTO rv_bitbyte+1(1).
+ GET BIT 3 OF iv_x INTO rv_bitbyte+2(1).
+ GET BIT 4 OF iv_x INTO rv_bitbyte+3(1).
+ GET BIT 5 OF iv_x INTO rv_bitbyte+4(1).
+ GET BIT 6 OF iv_x INTO rv_bitbyte+5(1).
+ GET BIT 7 OF iv_x INTO rv_bitbyte+6(1).
+ GET BIT 8 OF iv_x INTO rv_bitbyte+7(1).
+
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS zcl_abapgit_ui_factory IMPLEMENTATION.
+ METHOD get_asset_manager.
+
+ DATA lo_buf TYPE REF TO zcl_abapgit_string_buffer.
+ DATA li_asset_man TYPE REF TO zif_abapgit_gui_asset_manager.
+
+ CREATE OBJECT lo_buf.
+
+ li_asset_man = zcl_abapgit_gui_asset_manager=>create( ).
+
+****************************************************
+* abapmerge Pragma [include] - ZABAPGIT_CSS_COMMON.W3MI.DATA.CSS
+****************************************************
+ lo_buf->add( '/*' ).
+ lo_buf->add( ' * ABAPGIT COMMON CSS' ).
+ lo_buf->add( ' */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* GLOBALS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'body {' ).
+ lo_buf->add( ' overflow-x: hidden;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'body.centered {' ).
+ lo_buf->add( ' max-width: 1280px;' ).
+ lo_buf->add( ' margin: 0 auto;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'body.full_width {' ).
+ lo_buf->add( ' width:100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'a, a:visited {' ).
+ lo_buf->add( ' text-decoration: none;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'a:hover, a:active {' ).
+ lo_buf->add( ' cursor: pointer;' ).
+ lo_buf->add( ' text-decoration: underline;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'img {' ).
+ lo_buf->add( ' border-width: 0px;' ).
+ lo_buf->add( ' vertical-align: middle;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table { border-collapse: collapse; }' ).
+ lo_buf->add( 'pre { display: inline; }' ).
+ lo_buf->add( 'sup {' ).
+ lo_buf->add( ' vertical-align: top;' ).
+ lo_buf->add( ' position: relative;' ).
+ lo_buf->add( ' top: -0.5em;' ).
+ lo_buf->add( ' font-size: 75%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'input, textarea, select {' ).
+ lo_buf->add( ' padding: 3px 0.5em;' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'input:focus, textarea:focus {' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.cursor-pointer {' ).
+ lo_buf->add( ' cursor: pointer;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.separator {' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( ' padding-right: 0.5em;' ).
+ lo_buf->add( ' opacity: 0.25;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* MODIFIERS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.emphasis { font-weight: bold !important; }' ).
+ lo_buf->add( '.crossout { text-decoration: line-through !important; }' ).
+ lo_buf->add( '.right { text-align:right; }' ).
+ lo_buf->add( '.center { text-align:center; }' ).
+ lo_buf->add( '.paddings { padding: 0.5em 0.5em; }' ).
+ lo_buf->add( '.pad-sides { padding-left: 0.3em; padding-right: 0.3em; }' ).
+ lo_buf->add( '.pad-1em { padding: 1em 1em; }' ).
+ lo_buf->add( '.margin-v5 { margin-top: 0.5em; margin-bottom: 0.5em; }' ).
+ lo_buf->add( '.margin-v1 { margin-top: 1em; margin-bottom: 1em; }' ).
+ lo_buf->add( '.indent5em { padding-left: 0.5em; }' ).
+ lo_buf->add( '.pad4px { padding: 4px; }' ).
+ lo_buf->add( '.w100 { width: 100%; }' ).
+ lo_buf->add( '.wmin { width: 1%; }' ).
+ lo_buf->add( '.w40 { width: 40%; }' ).
+ lo_buf->add( '.float-right { float: right; }' ).
+ lo_buf->add( '.pad-right { padding-right: 6px; }' ).
+ lo_buf->add( '.no-pad { padding: 0px !important; }' ).
+ lo_buf->add( '.inline { display: inline; }' ).
+ lo_buf->add( '.hidden { visibility: hidden; }' ).
+ lo_buf->add( '.nodisplay { display: none }' ).
+ lo_buf->add( '.m-em5-sides { margin-left: 0.5em; margin-right: 0.5em }' ).
+ lo_buf->add( '.w600px { width: 600px }' ).
+ lo_buf->add( '.w800px { width: 800px }' ).
+ lo_buf->add( '.w1000px { width: 1000px }' ).
+ lo_buf->add( '.wmax600px { max-width: 600px }' ).
+ lo_buf->add( '.auto-center { /* use with max-width */' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( ' margin-left: auto;' ).
+ lo_buf->add( ' margin-right: auto;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.boxed {' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' padding: 4px 7px;' ).
+ lo_buf->add( ' margin-left: 0.2em;' ).
+ lo_buf->add( ' margin-right: 0.2em;' ).
+ lo_buf->add( ' font-size: smaller;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.boxed i.icon {' ).
+ lo_buf->add( ' padding-right: 5px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.red-filled-set {' ).
+ lo_buf->add( ' border-width: 0px;' ).
+ lo_buf->add( ' color: hsl(0, 78%, 93%);' ).
+ lo_buf->add( ' background-color: hsl(0, 78%, 65%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.green-filled-set {' ).
+ lo_buf->add( ' border-width: 0px;' ).
+ lo_buf->add( ' color: hsl(120, 45%, 90%);' ).
+ lo_buf->add( ' background-color: hsl(120, 27%, 60%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.yellow-filled-set {' ).
+ lo_buf->add( ' border-width: 0px;' ).
+ lo_buf->add( ' color: hsl(45, 99%, 90%);' ).
+ lo_buf->add( ' background-color: hsl(45, 100%, 46%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* PANELS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.panel {' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' padding: 0.5em 0.5em;' ).
+ lo_buf->add( ' margin: 0.5em 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.dummydiv {' ).
+ lo_buf->add( ' padding: 0.5em 1em;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'a.close-btn {' ).
+ lo_buf->add( ' text-decoration: none;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* STRUCTURE DIVS, HEADER & FOOTER */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div#header {' ).
+ lo_buf->add( ' padding: 0.5em 0.5em;' ).
+ lo_buf->add( ' border-bottom: 3px double;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div#header > div { display: inline-block }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.logo .icon { display: inline-block }' ).
+ lo_buf->add( '.logo .icon:before { width: auto }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* official logo colors, not vars, redefine in themes directly*/' ).
+ lo_buf->add( '.logo .icon.icon-git-alt { color: #f03c2e }' ).
+ lo_buf->add( '.logo .icon.icon-abapgit {' ).
+ lo_buf->add( ' color: #362701;' ).
+ lo_buf->add( ' vertical-align: bottom;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div#header .logo { font-size: x-large }' ).
+ lo_buf->add( 'div#header .page-title { font-size: x-large }' ).
+ lo_buf->add( 'div#header span.spacer {' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' padding-right: 0.25em;' ).
+ lo_buf->add( ' padding-left: 0.25em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div#footer .sponsor a { font-size: smaller; }' ).
+ lo_buf->add( 'div#footer .logo { font-size: large }' ).
+ lo_buf->add( 'div#footer {' ).
+ lo_buf->add( ' padding: 0.5em 0.5em;' ).
+ lo_buf->add( ' border-top: 3px double;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div#footer .version {' ).
+ lo_buf->add( ' margin-top: 0.5em;' ).
+ lo_buf->add( ' font-size: small;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '#debug-output {' ).
+ lo_buf->add( ' text-align: right;' ).
+ lo_buf->add( ' padding-right: 0.5em;' ).
+ lo_buf->add( ' font-size: smaller;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '#debug-output p {' ).
+ lo_buf->add( ' margin-top: 0em;' ).
+ lo_buf->add( ' margin-bottom: 0em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* ERROR LOG */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.log {' ).
+ lo_buf->add( ' padding: 6px;' ).
+ lo_buf->add( ' margin: 4px;' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' border-radius: 4px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.log > span { display:block; }' ).
+ lo_buf->add( 'div.log .icon { padding-right: 6px; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* REPOSITORY */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.repo {' ).
+ lo_buf->add( ' padding: 0.5em 1em 0.5em 1em;' ).
+ lo_buf->add( ' position: relative;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_name span.name {' ).
+ lo_buf->add( ' font-weight: bold;' ).
+ lo_buf->add( ' font-size: 14pt;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_name a.url {' ).
+ lo_buf->add( ' font-size: 12pt;' ).
+ lo_buf->add( ' margin-left: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_name span.url {' ).
+ lo_buf->add( ' font-size: 12pt;' ).
+ lo_buf->add( ' margin-left: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_name .icon {' ).
+ lo_buf->add( ' padding-right: 4px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_attr {' ).
+ lo_buf->add( ' font-size: 12pt;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_attr span {' ).
+ lo_buf->add( ' margin-left: 0.2em;' ).
+ lo_buf->add( ' margin-right: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_attr span.bg_marker {' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' font-size: 8pt;' ).
+ lo_buf->add( ' padding: 4px 2px 3px 2px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* ABAPGIT OBJECTS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.branch,' ).
+ lo_buf->add( 'span.user-box,' ).
+ lo_buf->add( 'span.package-box,' ).
+ lo_buf->add( 'span.path-box,' ).
+ lo_buf->add( 'span.transport-box {' ).
+ lo_buf->add( ' padding: 2px 4px;' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' border-radius: 4px;' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.package-box i.icon {' ).
+ lo_buf->add( ' margin-right: 0.15em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* MISC AND REFACTOR */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.hidden-submit {' ).
+ lo_buf->add( ' border: 0 none;' ).
+ lo_buf->add( ' height: 0;' ).
+ lo_buf->add( ' width: 0;' ).
+ lo_buf->add( ' padding: 0;' ).
+ lo_buf->add( ' margin: 0;' ).
+ lo_buf->add( ' position: absolute;' ).
+ lo_buf->add( ' overflow: hidden;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* STATE BLOCK COMMON*/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.state-block {' ).
+ lo_buf->add( ' margin-left: 1em;' ).
+ lo_buf->add( ' font-family: Consolas, "Lucida Console", Courier, monospace;' ).
+ lo_buf->add( ' font-size: x-small;' ).
+ lo_buf->add( ' vertical-align: 13%;' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( ' white-space: nowrap;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.state-block span {' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' padding: 0px 3px;' ).
+ lo_buf->add( ' border-width: 1px;' ).
+ lo_buf->add( ' border-style: solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* REPOSITORY TABLE*/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.repo_container {' ).
+ lo_buf->add( ' position: relative;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.repo_banner {' ).
+ lo_buf->add( ' margin: 0em 1em 1em;' ).
+ lo_buf->add( ' padding: 0.5em 0.5em;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( ' font-size: 85%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.repo_tab {' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( ' line-height: 1.2;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_tab th {' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( ' padding: 0.5em;' ).
+ lo_buf->add( ' border-bottom: 1px solid;' ).
+ lo_buf->add( ' font-weight: normal;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_tab td {' ).
+ lo_buf->add( ' vertical-align: middle;' ).
+ lo_buf->add( ' padding-top: 2px;' ).
+ lo_buf->add( ' padding-bottom: 2px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab td.icon {' ).
+ lo_buf->add( ' width: 1px;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( ' padding-left: 8px;' ).
+ lo_buf->add( ' padding-right: 4px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab td.transport {' ).
+ lo_buf->add( ' width: 140px;' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_tab td.type {' ).
+ lo_buf->add( ' width: 4em;' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab td.filename{' ).
+ lo_buf->add( ' padding-left: 1em;' ).
+ lo_buf->add( ' word-break: break-all;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab td.object {' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab td.files {' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( ' line-height: 1.5;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab tr.object_row{' ).
+ lo_buf->add( ' border-top: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab td.cmd, .repo_tab th.cmd {' ).
+ lo_buf->add( ' text-align: right;' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( ' padding-right: 0.7em;' ).
+ lo_buf->add( ' min-width: 70px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab th.cmd .icon{' ).
+ lo_buf->add( ' padding-right: 8px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_tab tr:first-child td { border-top: 0px; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab tr:hover td {' ).
+ lo_buf->add( ' background-image: linear-gradient(rgba(0, 0, 0, 0.075), rgba(0, 0, 0, 0.075));' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* STAGE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'th.stage-status { width: 30px; }' ).
+ lo_buf->add( 'th.stage-objtype { width: 30px; }' ).
+ lo_buf->add( 'input.stage-filter { width: 18em; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.stage_tab {' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' margin-top: 0.2em;' ).
+ lo_buf->add( ' line-height: 1.5;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab td {' ).
+ lo_buf->add( ' border-top: 1px solid;' ).
+ lo_buf->add( ' vertical-align: middle;' ).
+ lo_buf->add( ' padding: 2px 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab th {' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( ' font-weight: normal;' ).
+ lo_buf->add( ' padding: 4px 0.5em;' ).
+ lo_buf->add( ' border-bottom: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab td.status {' ).
+ lo_buf->add( ' width: 2em;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab td.highlight {' ).
+ lo_buf->add( ' font-weight: bold;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab td.name {' ).
+ lo_buf->add( ' word-break: break-all;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.stage_tab tr:first-child td { border-top: 0px; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.stage_tab tr:hover td {' ).
+ lo_buf->add( ' background-image: linear-gradient(rgba(0, 0, 0, 0.075), rgba(0, 0, 0, 0.075));' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.stage_tab td.cmd { cursor: pointer; }' ).
+ lo_buf->add( '.stage_tab td.cmd a { padding: 0px 4px; }' ).
+ lo_buf->add( '.stage_tab th.cmd a { padding: 0px 4px; }' ).
+ lo_buf->add( '.stage_tab tbody tr:first-child td { padding-top: 0.5em; }' ).
+ lo_buf->add( '.stage_tab tbody tr:last-child td { padding-bottom: 0.5em; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* COMMIT */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.form-container {' ).
+ lo_buf->add( ' padding: 1em 1em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'form.aligned-form {' ).
+ lo_buf->add( ' display: table;' ).
+ lo_buf->add( ' border-spacing: 2px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'form.aligned-form label {' ).
+ lo_buf->add( ' padding-right: 1em;' ).
+ lo_buf->add( ' vertical-align: middle;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'form.aligned-form select {' ).
+ lo_buf->add( ' padding-right: 1em;' ).
+ lo_buf->add( ' vertical-align: middle;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'form.aligned-form span.sub-title {' ).
+ lo_buf->add( ' font-size: smaller;' ).
+ lo_buf->add( ' padding-top: 8px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'form.aligned-form div.row { display: table-row; }' ).
+ lo_buf->add( 'form.aligned-form label { display: table-cell; }' ).
+ lo_buf->add( 'form.aligned-form input { display: table-cell; }' ).
+ lo_buf->add( 'form.aligned-form input[type="text"] { width: 25em; }' ).
+ lo_buf->add( 'form.aligned-form span.cell { display: table-cell; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* SETTINGS STYLES */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.settings_container {' ).
+ lo_buf->add( ' padding: 0.5em 0.5em 1em;' ).
+ lo_buf->add( ' font-size: 10pt;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.settings_section {' ).
+ lo_buf->add( ' margin-left:50px' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.settings td:first-child {' ).
+ lo_buf->add( ' padding-left: 1em;' ).
+ lo_buf->add( ' padding-right: 1em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DIFF */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.diff {' ).
+ lo_buf->add( ' padding: 0.7em' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.diff_head {' ).
+ lo_buf->add( ' padding-bottom: 0.7em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.diff_name {' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.diff_changed_by {' ).
+ lo_buf->add( ' float: right;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.diff_banner {' ).
+ lo_buf->add( ' border-style: solid;' ).
+ lo_buf->add( ' border-width: 1px;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' padding-left: 0.3em;' ).
+ lo_buf->add( ' padding-right: 0.3em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.diff_content {' ).
+ lo_buf->add( ' border-top: 1px solid;' ).
+ lo_buf->add( ' border-bottom: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.diff_content tbody tr td{' ).
+ lo_buf->add( ' width: 50%;' ).
+ lo_buf->add( ' vertical-align: top' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.diff_head span.state-block {' ).
+ lo_buf->add( ' margin-left: 0.5em;' ).
+ lo_buf->add( ' font-size: inherit;' ).
+ lo_buf->add( ' vertical-align: initial;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.diff_head span.state-block span {' ).
+ lo_buf->add( ' padding: 0px 4px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DIFF TABLE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.diff_tab {' ).
+ lo_buf->add( ' font-family: Consolas, Courier, monospace;' ).
+ lo_buf->add( ' font-size: 10pt;' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab td,' ).
+ lo_buf->add( 'table.diff_tab th {' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( ' padding-right: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab th {' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( ' font-weight: normal;' ).
+ lo_buf->add( ' padding-top: 3px;' ).
+ lo_buf->add( ' padding-bottom: 3px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab thead.header th {' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( ' font-weight: bold;' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( ' font-size: 9pt;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab td.num, th.num {' ).
+ lo_buf->add( ' width: 1%;' ).
+ lo_buf->add( ' min-width: 2em;' ).
+ lo_buf->add( ' padding-right: 8px;' ).
+ lo_buf->add( ' padding-left: 8px;' ).
+ lo_buf->add( ' text-align: right !important;' ).
+ lo_buf->add( ' border-left: 1px solid;' ).
+ lo_buf->add( ' border-right: 1px solid;' ).
+ lo_buf->add( ' -ms-user-select: none;' ).
+ lo_buf->add( ' user-select: none;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab td.patch, th.patch {' ).
+ lo_buf->add( ' width: 1%;' ).
+ lo_buf->add( ' min-width: 1.5em;' ).
+ lo_buf->add( ' padding-right: 8px;' ).
+ lo_buf->add( ' padding-left: 8px;' ).
+ lo_buf->add( ' text-align: right !important;' ).
+ lo_buf->add( ' border-left: 1px solid;' ).
+ lo_buf->add( ' border-right: 1px solid;' ).
+ lo_buf->add( ' -ms-user-select: none;' ).
+ lo_buf->add( ' user-select: none;' ).
+ lo_buf->add( ' cursor: pointer;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.diff_tab tr.diff_line:hover td {' ).
+ lo_buf->add( ' background-image: linear-gradient(rgba(0, 0, 0, 0.075), rgba(0, 0, 0, 0.075));' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.diff_tab td.num::before {' ).
+ lo_buf->add( ' content: attr(line-num);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab code {' ).
+ lo_buf->add( ' font-family: inherit;' ).
+ lo_buf->add( ' white-space: pre;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab td.code {' ).
+ lo_buf->add( ' word-wrap: break-word;' ).
+ lo_buf->add( ' white-space: pre-wrap;' ).
+ lo_buf->add( ' overflow: visible;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.diff_tab tbody tr:first-child td { padding-top: 0.5em; }' ).
+ lo_buf->add( 'table.diff_tab tbody tr:last-child td { padding-bottom: 0.5em; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.diff_tab td.mark, th.mark {' ).
+ lo_buf->add( ' width: 0.1%;' ).
+ lo_buf->add( ' -ms-user-select: none;' ).
+ lo_buf->add( ' user-select: none;' ).
+ lo_buf->add( ' cursor: default;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.diff_select_left td.diff_right,' ).
+ lo_buf->add( '.diff_select_left td.diff_right *,' ).
+ lo_buf->add( '.diff_select_left th.diff_right,' ).
+ lo_buf->add( '.diff_select_left th.diff_right *,' ).
+ lo_buf->add( '.diff_select_right td.diff_left,' ).
+ lo_buf->add( '.diff_select_right td.diff_left *,' ).
+ lo_buf->add( '.diff_select_right th.diff_left,' ).
+ lo_buf->add( '.diff_select_right th.diff_left * {' ).
+ lo_buf->add( ' -ms-user-select: none;' ).
+ lo_buf->add( ' user-select: none;' ).
+ lo_buf->add( ' cursor: text;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.diff_select_left td.diff_left,' ).
+ lo_buf->add( '.diff_select_left td.diff_left *,' ).
+ lo_buf->add( '.diff_select_left th.diff_left,' ).
+ lo_buf->add( '.diff_select_left th.diff_left *,' ).
+ lo_buf->add( '.diff_select_right td.diff_right,' ).
+ lo_buf->add( '.diff_select_right td.diff_right *,' ).
+ lo_buf->add( '.diff_select_right th.diff_right,' ).
+ lo_buf->add( '.diff_select_right th.diff_right * {' ).
+ lo_buf->add( ' -ms-user-select: text;' ).
+ lo_buf->add( ' user-select: text;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'td.diff_others::selection,' ).
+ lo_buf->add( 'td.diff_others *::selection,' ).
+ lo_buf->add( 'th.diff_others::selection,' ).
+ lo_buf->add( 'th.diff_others *::selection {' ).
+ lo_buf->add( ' background-color: transparent;' ).
+ lo_buf->add( ' cursor: default;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.diff_select_left td.diff_right::selection,' ).
+ lo_buf->add( '.diff_select_left td.diff_right *::selection,' ).
+ lo_buf->add( '.diff_select_left th.diff_right::selection,' ).
+ lo_buf->add( '.diff_select_left th.diff_right *::selection,' ).
+ lo_buf->add( '.diff_select_right td.diff_left::selection,' ).
+ lo_buf->add( '.diff_select_right td.diff_left *::selection,' ).
+ lo_buf->add( '.diff_select_right th.diff_left::selection,' ).
+ lo_buf->add( '.diff_select_right th.diff_left *::selection {' ).
+ lo_buf->add( ' background-color: transparent;' ).
+ lo_buf->add( ' cursor: text;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DEBUG INFO STYLES */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.debug_container {' ).
+ lo_buf->add( ' padding: 0.5em;' ).
+ lo_buf->add( ' font-size: 10pt;' ).
+ lo_buf->add( ' font-family: Consolas, Courier, monospace;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.debug_container p {' ).
+ lo_buf->add( ' margin: 0px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* *** */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'li.action_link.enabled{' ).
+ lo_buf->add( ' visibility: visible;' ).
+ lo_buf->add( ' position: relative;' ).
+ lo_buf->add( ' display: block;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'li.action_link:not(enabled){' ).
+ lo_buf->add( ' visibility: hidden;' ).
+ lo_buf->add( ' position: fixed; /* so it does not take up space when hidden */' ).
+ lo_buf->add( ' display: none;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* TUTORIAL */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.tutorial {' ).
+ lo_buf->add( ' margin-top: 3px;' ).
+ lo_buf->add( ' padding: 0.5em 1em 0.5em 1em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.tutorial li { margin: 2px 0px }' ).
+ lo_buf->add( 'div.tutorial h1 { font-size: 18pt; }' ).
+ lo_buf->add( 'div.tutorial h2 { font-size: 14pt;}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* MENU */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Special credits to example at https://codepen.io/philhoyt/pen/ujHzd */' ).
+ lo_buf->add( '/* container div, aligned left, but with .float-right modifier aligns right */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.nav-container ul {' ).
+ lo_buf->add( ' list-style: none;' ).
+ lo_buf->add( ' position: relative;' ).
+ lo_buf->add( ' float: left;' ).
+ lo_buf->add( ' margin: 0;' ).
+ lo_buf->add( ' padding: 0;' ).
+ lo_buf->add( ' white-space: nowrap;' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.nav-container.float-right ul { float: right; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.nav-container ul a {' ).
+ lo_buf->add( ' display: block;' ).
+ lo_buf->add( ' text-decoration: none;' ).
+ lo_buf->add( ' line-height: 30px;' ).
+ lo_buf->add( ' padding: 0 12px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* clearfix https://css-tricks.com/snippets/css/clear-fix/ */' ).
+ lo_buf->add( '.nav-container:after {' ).
+ lo_buf->add( ' clear: both;' ).
+ lo_buf->add( ' display: block;' ).
+ lo_buf->add( ' content: "";' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* submenues align to left or right border of the active item' ).
+ lo_buf->add( ' depending on .float-right modifier */' ).
+ lo_buf->add( '.nav-container ul li {' ).
+ lo_buf->add( ' position: relative;' ).
+ lo_buf->add( ' float: left;' ).
+ lo_buf->add( ' margin: 0;' ).
+ lo_buf->add( ' padding: 0;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.nav-container.float-right ul ul { left: auto; right: 0; }' ).
+ lo_buf->add( '.nav-container ul li.current-menu-item { font-weight: 700; }' ).
+ lo_buf->add( '.nav-container ul li.force-nav-hover ul { display: block; }' ).
+ lo_buf->add( '.nav-container ul li:hover > ul { display: block; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* special selection style for 1st level items (see also .corner below) */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.nav-container ul ul {' ).
+ lo_buf->add( ' display: none;' ).
+ lo_buf->add( ' position: absolute;' ).
+ lo_buf->add( ' top: 100%;' ).
+ lo_buf->add( ' left: 0;' ).
+ lo_buf->add( ' z-index: 1;' ).
+ lo_buf->add( ' padding: 0;' ).
+ lo_buf->add( ' box-shadow: 1px 1px 3px 0px #bbb;' ).
+ lo_buf->add( ' max-height: 700px;' ).
+ lo_buf->add( ' overflow: auto;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.nav-container ul ul li {' ).
+ lo_buf->add( ' float: none;' ).
+ lo_buf->add( ' min-width: 160px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.nav-container ul ul a {' ).
+ lo_buf->add( ' line-height: 120%;' ).
+ lo_buf->add( ' padding: 8px 15px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.nav-container ul ul ul {' ).
+ lo_buf->add( ' top: 0;' ).
+ lo_buf->add( ' left: 100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.nav-container.float-right ul ul ul {' ).
+ lo_buf->add( ' left: auto;' ).
+ lo_buf->add( ' right: 100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Minizone to extent hover area,' ).
+ lo_buf->add( ' aligned to the left or to the right of the selected item' ).
+ lo_buf->add( ' depending on .float-right modifier */' ).
+ lo_buf->add( '.nav-container > ul > li > div.minizone {' ).
+ lo_buf->add( ' display: none;' ).
+ lo_buf->add( ' z-index: 1;' ).
+ lo_buf->add( ' position: absolute;' ).
+ lo_buf->add( ' padding: 0px;' ).
+ lo_buf->add( ' width: 16px;' ).
+ lo_buf->add( ' height: 100%;' ).
+ lo_buf->add( ' bottom: 0px;' ).
+ lo_buf->add( ' left: 100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.nav-container > ul > li:hover div.minizone { display: block; }' ).
+ lo_buf->add( '.nav-container.float-right > ul > li > div.minizone {' ).
+ lo_buf->add( ' left: auto;' ).
+ lo_buf->add( ' right: 100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* icons - text-align strictly left - otherwise look ugly' ).
+ lo_buf->add( ' + bite a bit of left padding for nicer look' ).
+ lo_buf->add( ' + forbids item text wrapping (maybe can be done differently) */' ).
+ lo_buf->add( '.nav-container ul ul li a .icon {' ).
+ lo_buf->add( ' padding-right: 10px;' ).
+ lo_buf->add( ' margin-left: -3px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.nav-container ul.with-icons li {' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( ' white-space: nowrap;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Special .corner modifier - hangs menu at the top right corner' ).
+ lo_buf->add( ' and cancels 1st level background coloring */' ).
+ lo_buf->add( '.nav-container.corner {' ).
+ lo_buf->add( ' position: absolute;' ).
+ lo_buf->add( ' right: 0px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Toolbar separator style */' ).
+ lo_buf->add( '.nav-container ul ul li.separator {' ).
+ lo_buf->add( ' font-size: x-small;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( ' padding: 4px 0;' ).
+ lo_buf->add( ' text-transform: uppercase;' ).
+ lo_buf->add( ' border-bottom: 1px solid;' ).
+ lo_buf->add( ' border-top: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.nav-container ul ul li.separator:first-child { border-top: none; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* NEWS ANNOUNCEMENT */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel {' ).
+ lo_buf->add( ' position: absolute;' ).
+ lo_buf->add( ' z-index: 99;' ).
+ lo_buf->add( ' top: 36px;' ).
+ lo_buf->add( ' left: 50%;' ).
+ lo_buf->add( ' width: 40em;' ).
+ lo_buf->add( ' margin-left: -20em;' ).
+ lo_buf->add( ' box-shadow: 1px 1px 3px 2px #dcdcdc;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel-fixed {' ).
+ lo_buf->add( ' position: fixed;' ).
+ lo_buf->add( ' top: 15%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel div.info-hint {' ).
+ lo_buf->add( ' text-transform: uppercase;' ).
+ lo_buf->add( ' font-size: small;' ).
+ lo_buf->add( ' padding: 8px 6px 0px;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel div.info-title {' ).
+ lo_buf->add( ' text-transform: uppercase;' ).
+ lo_buf->add( ' font-size: small;' ).
+ lo_buf->add( ' padding: 6px;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel div.info-title a.close-btn {' ).
+ lo_buf->add( ' padding-left: 12px;' ).
+ lo_buf->add( ' padding-right: 2px;' ).
+ lo_buf->add( ' position: relative;' ).
+ lo_buf->add( ' bottom: 1px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel div.info-list {' ).
+ lo_buf->add( ' padding: 0.8em 0.7em 1em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel ul {' ).
+ lo_buf->add( ' padding-left: 10px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel li {' ).
+ lo_buf->add( ' padding-left: 0px;' ).
+ lo_buf->add( ' list-style-type: none;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel h1:first-child { margin: auto; }' ).
+ lo_buf->add( 'div.info-panel h1 {' ).
+ lo_buf->add( ' font-size: inherit;' ).
+ lo_buf->add( ' padding: 6px 4px;' ).
+ lo_buf->add( ' margin: 4px auto auto;' ).
+ lo_buf->add( ' text-decoration: underline;' ).
+ lo_buf->add( ' font-weight: normal;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel .version-marker {' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' margin-left: 20px;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' padding: 0px 6px;' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel .update { border: 1px solid; }' ).
+ lo_buf->add( 'div.info-panel div.info-list td { padding-right: 1em }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* ERROR MESSAGE PANEL */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.message-panel {' ).
+ lo_buf->add( ' z-index: 99;' ).
+ lo_buf->add( ' box-shadow: 2px 2px 4px 0px hsla(0, 0%, 0%, .1);' ).
+ lo_buf->add( ' padding: 0.5em 1em;' ).
+ lo_buf->add( ' position: fixed;' ).
+ lo_buf->add( ' bottom: 12px;' ).
+ lo_buf->add( ' width: 95%;' ).
+ lo_buf->add( ' margin: 0 auto;' ).
+ lo_buf->add( ' max-width: 1248px;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' border-radius: 5px;' ).
+ lo_buf->add( ' border-color: hsl(0, 42%, 64%);' ).
+ lo_buf->add( ' background-color: hsla(0, 42%, 90%, 1);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.message-panel-bar {' ).
+ lo_buf->add( ' position: absolute;' ).
+ lo_buf->add( ' bottom: 10px;' ).
+ lo_buf->add( ' right: 10px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.message-panel-commands {' ).
+ lo_buf->add( ' display: none;' ).
+ lo_buf->add( ' margin-right: 2em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.message-panel-commands a {' ).
+ lo_buf->add( ' padding: 0em 0.5em;' ).
+ lo_buf->add( ' border-left: 1px solid;' ).
+ lo_buf->add( ' border-left-color: #ccc;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.message-panel-commands a:first-child {' ).
+ lo_buf->add( ' padding-left: 0;' ).
+ lo_buf->add( ' border-left: none;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.message-panel:hover .message-panel-commands {' ).
+ lo_buf->add( ' display: block;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* TOOLTIP TEXT */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.link-hint {' ).
+ lo_buf->add( ' line-height: 1em;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( ' padding: 5px 15px;' ).
+ lo_buf->add( ' border-radius: 4px;' ).
+ lo_buf->add( ' position: absolute;' ).
+ lo_buf->add( ' z-index: 1;' ).
+ lo_buf->add( ' margin-top: -30px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.link-hint-a {' ).
+ lo_buf->add( ' margin-left: -60px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.link-hint-input {' ).
+ lo_buf->add( ' margin-left: -30px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.link-hint-i {' ).
+ lo_buf->add( ' margin-left: -30px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.link-hint .pending { color: hsla(0, 0%, 0%, 0.2); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Tooltip arrow */' ).
+ lo_buf->add( '.link-hint::after {' ).
+ lo_buf->add( ' content: "";' ).
+ lo_buf->add( ' position: absolute;' ).
+ lo_buf->add( ' top: 100%;' ).
+ lo_buf->add( ' left: 50%;' ).
+ lo_buf->add( ' margin-left: -5px;' ).
+ lo_buf->add( ' border-width: 5px;' ).
+ lo_buf->add( ' border-style: solid;' ).
+ lo_buf->add( ' border-color: transparent;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* HOTKEYS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'ul.hotkeys {' ).
+ lo_buf->add( ' list-style-type: none;' ).
+ lo_buf->add( ' padding: 0;' ).
+ lo_buf->add( ' margin: 0;' ).
+ lo_buf->add( ' font-size: smaller;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'ul.hotkeys span.key-id {' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' padding: 1px 7px;' ).
+ lo_buf->add( ' width: 3em;' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( ' margin-top: 0.2em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'ul.hotkeys span.key-descr {' ).
+ lo_buf->add( ' margin-left: 1.2em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.corner-hint {' ).
+ lo_buf->add( ' position: fixed;' ).
+ lo_buf->add( ' bottom: 10px;' ).
+ lo_buf->add( ' right: 10px;' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' padding: 4px;' ).
+ lo_buf->add( ' font-size: smaller;' ).
+ lo_buf->add( ' opacity: 0.5;' ).
+ lo_buf->add( ' z-index: 99;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Commit popup */' ).
+ lo_buf->add( 'table.commit tr .title {' ).
+ lo_buf->add( ' font-weight: bold;' ).
+ lo_buf->add( ' vertical-align: top;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Repo overview */' ).
+ lo_buf->add( '.repo-overview {' ).
+ lo_buf->add( ' padding: 0.5em 0.7em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview table {' ).
+ lo_buf->add( ' font-size: 90%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview-toolbar {' ).
+ lo_buf->add( ' padding: 1em 1em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview-toolbar label {' ).
+ lo_buf->add( ' margin-right: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview th {' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( ' font-weight: normal;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview table {' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview thead tr {' ).
+ lo_buf->add( ' border-bottom: 1px solid;' ).
+ lo_buf->add( ' line-height: 1.5;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview tfoot tr {' ).
+ lo_buf->add( ' border-top: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview tr.favorite .icon-star {' ).
+ lo_buf->add( ' color: #5e8dc9 !important;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview td,' ).
+ lo_buf->add( '.repo-overview th {' ).
+ lo_buf->add( ' padding: 6px 6px; /* maybe use height ? */' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview .ro-detail { display: none; }' ).
+ lo_buf->add( '.repo-overview .ro-go a {' ).
+ lo_buf->add( ' padding: 0px 0.15em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview .ro-go a:hover {' ).
+ lo_buf->add( ' color: #ff721e;' ).
+ lo_buf->add( ' text-decoration: none;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview td.labels {' ).
+ lo_buf->add( ' max-width: 18ch;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* REPO LABELS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo-label-catalog {' ).
+ lo_buf->add( ' padding: 1em 1em;' ).
+ lo_buf->add( ' margin-top: -1em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-label-catalog label {' ).
+ lo_buf->add( ' margin-right: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'ul.repo-labels {' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' list-style-type: none;' ).
+ lo_buf->add( ' padding-inline-start: 0px;' ).
+ lo_buf->add( ' padding-left: 0px;' ).
+ lo_buf->add( ' margin-block-start: 0px;' ).
+ lo_buf->add( ' margin-block-end: 0px;' ).
+ lo_buf->add( ' margin-top: 0px;' ).
+ lo_buf->add( ' margin-bottom: 0px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'ul.repo-labels li {' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' padding: 3px 5px;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' border-style: solid;' ).
+ lo_buf->add( ' border-width: 1px;' ).
+ lo_buf->add( ' margin-bottom: 2px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'ul.repo-labels li a {' ).
+ lo_buf->add( ' color: inherit;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'ul.repo-labels li:not(:last-child) { margin-right: 0.3em; }' ).
+ lo_buf->add( 'table ul.repo-labels li {' ).
+ lo_buf->add( ' font-size: 90%;' ).
+ lo_buf->add( ' padding: 2px 4px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* LABEL COLORS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.rl-white {' ).
+ lo_buf->add( ' color: hsl(0, 0%, 30%);' ).
+ lo_buf->add( ' background-color: hsl(0, 0%, 100%);' ).
+ lo_buf->add( ' border-color: hsl(0, 0%, 80%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-white-b {' ).
+ lo_buf->add( ' color: hsl(214, 100%, 60%);' ).
+ lo_buf->add( ' background-color: hsl(0, 0%, 100%);' ).
+ lo_buf->add( ' border-color: hsl(214, 89%, 86%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-white-r {' ).
+ lo_buf->add( ' color: hsl(0, 100%, 41%);' ).
+ lo_buf->add( ' background-color: hsl(0, 0%, 100%);' ).
+ lo_buf->add( ' border-color: hsl(0, 100%, 85%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-grey {' ).
+ lo_buf->add( ' color: hsl(0, 0%, 100%);' ).
+ lo_buf->add( ' background-color: hsl(0, 0%, 70%);' ).
+ lo_buf->add( ' border-color: hsl(0, 0%, 60%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-dark-w {' ).
+ lo_buf->add( ' color: hsl(0, 0%, 100%);' ).
+ lo_buf->add( ' background-color: hsl(0, 0%, 25%);' ).
+ lo_buf->add( ' border-color: hsl(0, 0%, 25%);;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-dark-y {' ).
+ lo_buf->add( ' color: hsl(43, 95%, 75%);' ).
+ lo_buf->add( ' background-color: hsl(0, 0%, 25%);' ).
+ lo_buf->add( ' border-color: hsl(0, 0%, 25%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-dark-r {' ).
+ lo_buf->add( ' color: hsl(0, 100%, 74%);' ).
+ lo_buf->add( ' background-color: hsl(0, 0%, 25%);' ).
+ lo_buf->add( ' border-color: hsl(0, 0%, 25%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-dark-b {' ).
+ lo_buf->add( ' color: hsl(227, 92%, 80%);' ).
+ lo_buf->add( ' background-color: hsl(0, 0%, 25%);' ).
+ lo_buf->add( ' border-color: hsl(0, 0%, 25%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-lightblue {' ).
+ lo_buf->add( ' color: hsl(217, 80%, 25%);' ).
+ lo_buf->add( ' background-color: hsl(216, 76%, 84%);' ).
+ lo_buf->add( ' border-color: hsl(216, 76%, 73%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-darkblue {' ).
+ lo_buf->add( ' color: hsl(218, 77%, 88%);' ).
+ lo_buf->add( ' background-color: hsl(217, 66%, 32%);' ).
+ lo_buf->add( ' border-color: hsl(217, 66%, 20%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-lightgreen {' ).
+ lo_buf->add( ' color: hsl(153, 76%, 18%);' ).
+ lo_buf->add( ' background-color: hsl(152, 65%, 82%);' ).
+ lo_buf->add( ' border-color: hsl(152, 65%, 65%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-darkgreen {' ).
+ lo_buf->add( ' color: hsl(0, 0%, 100%);' ).
+ lo_buf->add( ' background-color: hsl(153, 77%, 37%);' ).
+ lo_buf->add( ' border-color: hsl(153, 77%, 30%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-lightred {' ).
+ lo_buf->add( ' color: hsl(8, 86%, 29%);' ).
+ lo_buf->add( ' background-color: hsl(8, 74%, 80%);' ).
+ lo_buf->add( ' border-color: hsl(8, 74%, 70%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-darkred {' ).
+ lo_buf->add( ' color: hsl(7, 76%, 85%);' ).
+ lo_buf->add( ' background-color: hsl(8, 77%, 29%);' ).
+ lo_buf->add( ' border-color: hsl(8, 77%, 20%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-yellow {' ).
+ lo_buf->add( ' color: hsl(44, 87%, 22%);' ).
+ lo_buf->add( ' background-color: hsl(44, 94%, 87%);' ).
+ lo_buf->add( ' border-color: hsl(44, 94%, 70%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-darkyellow {' ).
+ lo_buf->add( ' color: hsl(49, 100%, 24%);' ).
+ lo_buf->add( ' background-color: hsl(49, 100%, 64%);' ).
+ lo_buf->add( ' border-color: hsl(49, 100%, 49%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-orange {' ).
+ lo_buf->add( ' color: hsl(0, 0%, 100%);' ).
+ lo_buf->add( ' background-color: hsl(19, 100%, 61%);' ).
+ lo_buf->add( ' border-color: hsl(19, 100%, 50%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-brown {' ).
+ lo_buf->add( ' color: hsl(33, 100%, 89%);' ).
+ lo_buf->add( ' background-color: hsl(33, 66%, 39%);' ).
+ lo_buf->add( ' border-color: hsl(33, 66%, 30%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-pink {' ).
+ lo_buf->add( ' color: hsl(340, 35%, 45%);' ).
+ lo_buf->add( ' background-color: hsl(340, 85%, 77%);' ).
+ lo_buf->add( ' border-color: hsl(340, 85%, 65%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-teal {' ).
+ lo_buf->add( ' color: hsl(0, 0%, 100%);' ).
+ lo_buf->add( ' background-color: hsl(191, 61%, 45%);' ).
+ lo_buf->add( ' border-color: hsl(191, 61%, 37%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.rl-darkviolet {' ).
+ lo_buf->add( ' color: hsl(0, 0%, 100%);' ).
+ lo_buf->add( ' background-color: hsl(258, 100%, 80%);' ).
+ lo_buf->add( ' border-color: hsl(258, 100%, 72%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* FORM FIELD HELP TOOLTIP */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.form-field-help-tooltip {' ).
+ lo_buf->add( ' position: relative;' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.form-field-help-tooltip .form-field-help-tooltip-text {' ).
+ lo_buf->add( ' visibility: hidden;' ).
+ lo_buf->add( ' width: 40ch;' ).
+ lo_buf->add( ' border-radius: 5px;' ).
+ lo_buf->add( ' position: absolute;' ).
+ lo_buf->add( ' z-index: 1;' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' padding: 0.4em 0.6em;' ).
+ lo_buf->add( ' text-align: justify;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.form-field-help-tooltip .form-field-help-tooltip-text p {' ).
+ lo_buf->add( ' margin: 0px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.form-field-help-tooltip .form-field-help-tooltip-text {' ).
+ lo_buf->add( ' background-color: white;' ).
+ lo_buf->add( ' border-color: #888;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.form-field-help-tooltip:hover .form-field-help-tooltip-text {' ).
+ lo_buf->add( ' visibility: visible;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.form-field-help-tooltip code {' ).
+ lo_buf->add( ' border-radius: 5px;' ).
+ lo_buf->add( ' font-size: 90%;' ).
+ lo_buf->add( ' padding: 0.1em 0.4em;' ).
+ lo_buf->add( ' background-color: #e2e2e2;' ).
+ lo_buf->add( ' word-wrap: break-word;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* TABLE COMPONENT DEFAULT STYLE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.default-table-container {' ).
+ lo_buf->add( ' padding: 6px 0.5em;' ).
+ lo_buf->add( ' background-color: white;' ).
+ lo_buf->add( ' border-radius: 6px;' ).
+ lo_buf->add( ' overflow-x: hidden;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.default-table {' ).
+ lo_buf->add( ' line-height: 1.5;' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.default-table thead tr:last-child {' ).
+ lo_buf->add( ' border-bottom: #efefef solid 1px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.default-table td,' ).
+ lo_buf->add( 'table.default-table th {' ).
+ lo_buf->add( ' padding: 6px 8px;' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.default-table th {' ).
+ lo_buf->add( ' white-space: nowrap;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.default-table th span.sort-arrow {' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' color: hsla(0, 0%, 0%, 0.15);' ).
+ lo_buf->add( ' width: 1em; /*for constant width*/' ).
+ lo_buf->add( ' text-align: right;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.default-table th span.sort-active {' ).
+ lo_buf->add( ' color: #4078c0;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.default-table th {' ).
+ lo_buf->add( ' padding-bottom: 10px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* CODE INSPECTOR */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci {' ).
+ lo_buf->add( ' margin-top: 1px;' ).
+ lo_buf->add( ' margin-bottom: 1px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci-msg {' ).
+ lo_buf->add( ' padding: 0.7em 1em 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.ci-msg span.ci-variant {' ).
+ lo_buf->add( ' font-weight: bold;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci-stats {' ).
+ lo_buf->add( ' padding: 0.5em 1em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.ci-stats span.count {' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' padding: 2px 6px;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci-detail {' ).
+ lo_buf->add( ' padding: 6px 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci-detail table td,' ).
+ lo_buf->add( 'div.ci-detail table th {' ).
+ lo_buf->add( ' vertical-align: text-top;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci-detail table th[data-cid="kind"],' ).
+ lo_buf->add( 'div.ci-detail table th[data-cid="obj_type"] {' ).
+ lo_buf->add( ' white-space: nowrap' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci-detail table td[data-cid="kind"] span {' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' width: 1em;' ).
+ lo_buf->add( ' height: 1em;' ).
+ lo_buf->add( ' vertical-align: inherit;' ).
+ lo_buf->add( ' color: transparent;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci-detail table td[data-cid="text"] {' ).
+ lo_buf->add( ' font-size: smaller;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* FLOATING BUTTONS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.floating-button {' ).
+ lo_buf->add( ' position: fixed;' ).
+ lo_buf->add( ' top: 8em;' ).
+ lo_buf->add( ' right: 2.8em;' ).
+ lo_buf->add( ' padding: 1em 1.8em;' ).
+ lo_buf->add( ' border-radius: 4px;' ).
+ lo_buf->add( ' border-width: 1px;' ).
+ lo_buf->add( ' border-style: solid;' ).
+ lo_buf->add( ' box-shadow: 2px 2px 6px 0px #ccc;' ).
+ lo_buf->add( ' cursor: pointer;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* COMMAND PALETTE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.cmd-palette {' ).
+ lo_buf->add( ' position: absolute;' ).
+ lo_buf->add( ' z-index: 99;' ).
+ lo_buf->add( ' top: 36px;' ).
+ lo_buf->add( ' left: 50%;' ).
+ lo_buf->add( ' width: 40em;' ).
+ lo_buf->add( ' margin-left: -20em;' ).
+ lo_buf->add( ' box-shadow: 1px 1px 3px 2px #dcdcdc;' ).
+ lo_buf->add( ' background-color: white;' ).
+ lo_buf->add( ' border: solid 2px;' ).
+ lo_buf->add( ' padding: 0px 1px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.cmd-palette input {' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( ' box-sizing: border-box;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.cmd-palette ul {' ).
+ lo_buf->add( ' max-height: 10em;' ).
+ lo_buf->add( ' overflow-y: scroll;' ).
+ lo_buf->add( ' margin: 4px 0;' ).
+ lo_buf->add( ' padding: 2px 4px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.cmd-palette li {' ).
+ lo_buf->add( ' list-style-type: none;' ).
+ lo_buf->add( ' cursor: default;' ).
+ lo_buf->add( ' padding: 4px 6px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.cmd-palette li .icon {' ).
+ lo_buf->add( ' margin-right: 10px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.cmd-palette li .icon:before {' ).
+ lo_buf->add( ' width: 1.1em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* SETTINGS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.settings_tab {' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' max-width: 600px;' ).
+ lo_buf->add( ' line-height: 1.5;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.settings_tab th {' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( ' padding: 0.5em;' ).
+ lo_buf->add( ' border-bottom: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.settings_tab td {' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( ' padding: 0.3em 0.5em;' ).
+ lo_buf->add( ' border-top: 1px solid;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.settings_tab input {' ).
+ lo_buf->add( ' border: none;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'settings_tab tr:first-child td { border-top: 0px; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* UNIT TESTS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.unit_tests {' ).
+ lo_buf->add( ' line-height: 1.5;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DIALOGS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.dialog {' ).
+ lo_buf->add( ' margin: 0 auto;' ).
+ lo_buf->add( ' margin-top: 1em;' ).
+ lo_buf->add( ' margin-bottom: 1em;' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' padding: 1em 1em;' ).
+ lo_buf->add( ' border-radius: 6px;' ).
+ lo_buf->add( ' text-align: left;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog-form {' ).
+ lo_buf->add( ' width: 600px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog-form-center {' ).
+ lo_buf->add( ' margin: 1em auto 1em;' ).
+ lo_buf->add( ' max-width: 600px;' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog ul {' ).
+ lo_buf->add( ' padding: 0;' ).
+ lo_buf->add( ' margin: 0;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li {' ).
+ lo_buf->add( ' padding: 5px 10px;' ).
+ lo_buf->add( ' display: block;' ).
+ lo_buf->add( ' list-style: none;' ).
+ lo_buf->add( ' position: relative;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.dialog-commands {' ).
+ lo_buf->add( ' text-align: right;' ).
+ lo_buf->add( ' margin-top: 12px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.dialog-commands a {' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' cursor: pointer;' ).
+ lo_buf->add( ' text-decoration: none;' ).
+ lo_buf->add( ' padding: 6px 12px;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.dialog-commands input[type="button"],' ).
+ lo_buf->add( '.dialog li.dialog-commands input[type="submit"] {' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' padding: 6px 12px;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( ' cursor: pointer;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.dialog-commands a.main,' ).
+ lo_buf->add( '.dialog li.dialog-commands input[type="submit"].main {' ).
+ lo_buf->add( ' border: 1px solid transparent;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog label {' ).
+ lo_buf->add( ' display: block;' ).
+ lo_buf->add( ' font-size: 90%;' ).
+ lo_buf->add( ' margin-top: 6px;' ).
+ lo_buf->add( ' margin-bottom: 6px;' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.error small {' ).
+ lo_buf->add( ' display: block;' ).
+ lo_buf->add( ' font-size: 75%;' ).
+ lo_buf->add( ' margin: 4px 0px;' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.hidden {' ).
+ lo_buf->add( ' padding: 0px 0px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog .radio-container {' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' padding: 4px;' ).
+ lo_buf->add( ' border-radius: 3px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog input[type="checkbox"] + label {' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog input[type="password"],' ).
+ lo_buf->add( '.dialog input[type="text"] {' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( ' box-sizing: border-box;' ).
+ lo_buf->add( ' height: 2.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog input[type="number"] {' ).
+ lo_buf->add( ' width: 25%;' ).
+ lo_buf->add( ' box-sizing: border-box;' ).
+ lo_buf->add( ' height: 2.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog textarea {' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( ' box-sizing: border-box;' ).
+ lo_buf->add( ' padding: 10px;' ).
+ lo_buf->add( ' font-family: Arial,Helvetica,sans-serif;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog .radio-container input[type="radio"] {' ).
+ lo_buf->add( ' visibility: hidden;' ).
+ lo_buf->add( ' display: none;' ).
+ lo_buf->add( ' height: 0px;' ).
+ lo_buf->add( ' width: 0px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog .radio-container input[type="radio"] + label {' ).
+ lo_buf->add( ' border: 1px solid transparent;' ).
+ lo_buf->add( ' cursor: pointer;' ).
+ lo_buf->add( ' width: auto;' ).
+ lo_buf->add( ' margin: 0px;' ).
+ lo_buf->add( ' padding: 3px 8px;' ).
+ lo_buf->add( ' border-radius: 2px;' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog .radio-container input[type="radio"]:checked + label {' ).
+ lo_buf->add( ' border: 1px solid transparent;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog table {' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog table thead td {' ).
+ lo_buf->add( ' font-size: 14px;' ).
+ lo_buf->add( ' height: 2.5em;' ).
+ lo_buf->add( ' background-color: #ddd;' ).
+ lo_buf->add( ' border: 1px solid #ccc;' ).
+ lo_buf->add( ' padding: 0px 10px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog table tbody td {' ).
+ lo_buf->add( ' border: 1px solid #ccc;' ).
+ lo_buf->add( ' background-color: white;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog table td input {' ).
+ lo_buf->add( ' border: 0px;' ).
+ lo_buf->add( ' background: none;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.with-command div.input-container {' ).
+ lo_buf->add( ' display: table-cell;' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.with-command div.command-container {' ).
+ lo_buf->add( ' display: table-cell;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.with-command input[type="button"],' ).
+ lo_buf->add( '.dialog li.with-command input[type="submit"] {' ).
+ lo_buf->add( ' height: 2.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog fieldset {' ).
+ lo_buf->add( ' margin-top: 1em;' ).
+ lo_buf->add( ' border: 1px solid;' ).
+ lo_buf->add( ' border-right: none;' ).
+ lo_buf->add( ' border-left: none;' ).
+ lo_buf->add( ' border-bottom: none;' ).
+ lo_buf->add( ' border-radius: 6px; /* does not work in IE ? */' ).
+ lo_buf->add( ' padding-bottom: 1em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog fieldset:first-child {' ).
+ lo_buf->add( ' margin-top: 0;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog fieldset legend {' ).
+ lo_buf->add( ' font-size: large;' ).
+ lo_buf->add( ' font-weight: bold;' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( ' padding-right: 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog .dialog-help {' ).
+ lo_buf->add( ' float: left;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* STICKY HEADERS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* https://www.w3schools.com/howto/howto_js_navbar_sticky.asp */' ).
+ lo_buf->add( '/* Note: We have to use JS since IE does not support CSS position:sticky */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* The sticky class is added to the navbar with JS when it reaches its scroll position */' ).
+ lo_buf->add( '.sticky {' ).
+ lo_buf->add( ' position: fixed;' ).
+ lo_buf->add( ' top: 0;' ).
+ lo_buf->add( ' z-index: 10;' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( ' padding: 0.5em;' ).
+ lo_buf->add( ' margin-bottom: 3px;' ).
+ lo_buf->add( ' max-height: 47px;' ).
+ lo_buf->add( ' max-width: 1265px; /* if set to 1280px, then actual width will be 1296px (strange) */' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.sticky_full_width {' ).
+ lo_buf->add( ' position: fixed;' ).
+ lo_buf->add( ' top: 0;' ).
+ lo_buf->add( ' z-index: 10;' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( ' padding: 0.5em 0.5em;' ).
+ lo_buf->add( ' margin-bottom: 3px;' ).
+ lo_buf->add( ' max-height: 47px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.sticky_full_width .nav-container {' ).
+ lo_buf->add( ' margin-right: 18px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Add some top padding to the page content to prevent sudden quick movement' ).
+ lo_buf->add( ' as the navigation bar gets a new position at the top of the page */' ).
+ lo_buf->add( '.sticky + .not_sticky {' ).
+ lo_buf->add( ' padding-top: 50px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Give more padding if browser control warning is present */' ).
+ lo_buf->add( '.sticky:has(.browser-control-warning) + .not_sticky,' ).
+ lo_buf->add( '.sticky_full_width:has(.browser-control-warning) + .not_sticky {' ).
+ lo_buf->add( ' padding-top: 75px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.sticky_full_width + .not_sticky {' ).
+ lo_buf->add( ' padding-top: 50px;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Light toolbar or blocks with separators */' ).
+ lo_buf->add( '.toolbar-light a {' ).
+ lo_buf->add( ' padding-left: 0.5em;' ).
+ lo_buf->add( ' padding-right: 0.5em;' ).
+ lo_buf->add( ' border-left: 1px solid;' ).
+ lo_buf->add( ' border-left-color: #ccc;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.toolbar-light a:first-child {' ).
+ lo_buf->add( ' padding-left: 0;' ).
+ lo_buf->add( ' border-left: none;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Warning if wrong browser control is used */' ).
+ lo_buf->add( '.browser-control-warning {' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* MODAL POPUP */' ).
+ lo_buf->add( '/* https://css-tricks.com/considerations-styling-modal/ */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.modal {' ).
+ lo_buf->add( ' /* center on screen */' ).
+ lo_buf->add( ' position: fixed;' ).
+ lo_buf->add( ' top: 50%;' ).
+ lo_buf->add( ' left: 50%;' ).
+ lo_buf->add( ' transform: translate(-50%, -50%);' ).
+ lo_buf->add( ' /* size */' ).
+ lo_buf->add( ' max-width: 100%;' ).
+ lo_buf->add( ' max-height: 100%;' ).
+ lo_buf->add( ' /* infront of overlay */' ).
+ lo_buf->add( ' z-index: 1010;' ).
+ lo_buf->add( ' display: block;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.modal-guts {' ).
+ lo_buf->add( ' padding: 6px 6px;' ).
+ lo_buf->add( ' /* let it scroll */' ).
+ lo_buf->add( ' overflow: auto;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.modal-guts .dialog {' ).
+ lo_buf->add( ' box-shadow: 2px 2px 4px 1px rgba(0,0,0,0.3);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.modal-overlay {' ).
+ lo_buf->add( ' /* darken and prevent interactions with background */' ).
+ lo_buf->add( ' z-index: 1000;' ).
+ lo_buf->add( ' position: fixed;' ).
+ lo_buf->add( ' top: 0;' ).
+ lo_buf->add( ' left: 0;' ).
+ lo_buf->add( ' width: 100%;' ).
+ lo_buf->add( ' height: 100%;' ).
+ lo_buf->add( ' background: rgba(0, 0, 0, 0.3);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.modal .radio-container label {' ).
+ lo_buf->add( ' /* hacky, improve later, get rid of !important, hook it to a named style instead */' ).
+ lo_buf->add( ' border-radius: 3px !important;' ).
+ lo_buf->add( ' border: 1px solid rgba(0, 0, 0, 0.3) !important;' ).
+ lo_buf->add( ' margin-bottom: 2px !important;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.modal .radio-container label:hover {' ).
+ lo_buf->add( ' background-color: rgba(0, 0, 0, 0.1);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* WHERE USED PAGE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.wu-header {' ).
+ lo_buf->add( ' padding: 8px 0.5em;' ).
+ lo_buf->add( ' margin: 0px 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.wu {' ).
+ lo_buf->add( ' padding: 8px 0.5em;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.wu table thead tr:first-child {' ).
+ lo_buf->add( ' /* TODO: maybe move this to default table style */' ).
+ lo_buf->add( ' color: hsl(0, 0%, 80%);' ).
+ lo_buf->add( ' text-transform: uppercase;' ).
+ lo_buf->add( ' font-size: 90%;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.wu table tbody {' ).
+ lo_buf->add( ' font-size: 90%;' ).
+ lo_buf->add( ' vertical-align: baseline; /* for second lines, used type */' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.wu table td[data-cid="dep_obj_name"] span.used-obj {' ).
+ lo_buf->add( ' display: block;' ).
+ lo_buf->add( ' color: hsl(0, 0%, 70%);' ).
+ lo_buf->add( ' font-size: smaller;' ).
+ lo_buf->add( ' text-transform: lowercase;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.wu table td[data-gid="where"],' ).
+ lo_buf->add( 'div.wu table th[data-gid="where"] {' ).
+ lo_buf->add( ' background-color: hsl(0, 0%, 97%);' ).
+ lo_buf->add( '}' ).
+ li_asset_man->register_asset(
+ iv_url = 'css/common.css'
+ iv_type = 'text/css'
+ iv_mime_name = 'ZABAPGIT_CSS_COMMON'
+ iv_inline = lo_buf->join_w_newline_and_flush( ) ).
+
+****************************************************
+* abapmerge Pragma [include] - ZABAPGIT_CSS_THEME_DEFAULT.W3MI.DATA.CSS
+****************************************************
+ lo_buf->add( '/*' ).
+ lo_buf->add( ' * ABAPGIT COLOR THEME CSS - DEFAULT' ).
+ lo_buf->add( ' */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ':root {' ).
+ lo_buf->add( ' --theme-background-color: #E8E8E8;' ).
+ lo_buf->add( ' --theme-container-background-color: #f2f2f2;' ).
+ lo_buf->add( ' --theme-container-border-color: lightgrey;' ).
+ lo_buf->add( ' --theme-table-background-color: white;' ).
+ lo_buf->add( ' --theme-table-head-background-color: #edf2f9;' ).
+ lo_buf->add( ' --theme-table-border-color: #ddd;' ).
+ lo_buf->add( ' --theme-table-cell-border-color: #eee;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' --theme-primary-font: "72", Arial, Helvetica, sans-serif;' ).
+ lo_buf->add( ' --theme-primary-font-color: #333333;' ).
+ lo_buf->add( ' --theme-primary-font-color-reduced: #ccc;' ).
+ lo_buf->add( ' --theme-font-size: 12pt;' ).
+ lo_buf->add( ' --theme-link-color: #4078c0;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' --theme-greyscale-dark: #808080;' ).
+ lo_buf->add( ' --theme-greyscale-medium: #b3b3b3;' ).
+ lo_buf->add( ' --theme-greyscale-light: #ccc;' ).
+ lo_buf->add( ' --theme-greyscale-lighter: lightgrey;' ).
+ lo_buf->add( ' --theme-linkhint-background: lightgreen;' ).
+ lo_buf->add( ' --theme-debug-color: #aaa;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* GLOBALS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'body {' ).
+ lo_buf->add( ' background-color: var(--theme-background-color);' ).
+ lo_buf->add( ' font-family: var(--theme-primary-font);' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color);' ).
+ lo_buf->add( ' font-size: var(--theme-font-size);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'a, a:visited { color: var(--theme-link-color); }' ).
+ lo_buf->add( '.link {' ).
+ lo_buf->add( ' color: var(--theme-link-color);' ).
+ lo_buf->add( ' cursor: pointer;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'input, textarea, select { border-color: #ddd; }' ).
+ lo_buf->add( 'input:focus, textarea:focus { border-color: #8cadd9; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* COLOR PALETTE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.grey { color: var(--theme-greyscale-lighter) !important; }' ).
+ lo_buf->add( '.grey70 { color: var(--theme-greyscale-medium) !important; }' ).
+ lo_buf->add( '.grey80 { color: var(--theme-greyscale-light) !important; }' ).
+ lo_buf->add( '.darkgrey { color: var(--theme-greyscale-dark) !important; }' ).
+ lo_buf->add( '.bgorange { background-color: orange; }' ).
+ lo_buf->add( '.attention { color: red !important; }' ).
+ lo_buf->add( '.error { color: #d41919 !important; }' ).
+ lo_buf->add( '.warning { color: #efb301 !important; }' ).
+ lo_buf->add( '.success { color: green !important; }' ).
+ lo_buf->add( '.blue { color: #5e8dc9 !important; }' ).
+ lo_buf->add( '.red { color: red !important; }' ).
+ lo_buf->add( '.white { color: white !important; }' ).
+ lo_buf->add( '.pink { color: pink !important; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* FLOATING BUTTONS AND COLOR SETS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.blue-set {' ).
+ lo_buf->add( ' border-color: #abc3e3;' ).
+ lo_buf->add( ' color: #5e8dc9;' ).
+ lo_buf->add( ' background-color: #d9e4f2;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.grey-set {' ).
+ lo_buf->add( ' border-color: #c7c7c7;' ).
+ lo_buf->add( ' color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( ' background-color: #e6e6e6;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* ABAPGIT OBJECTS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.user-box {' ).
+ lo_buf->add( ' border-color: #c2d4ea;' ).
+ lo_buf->add( ' background-color: #d9e4f2;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.package-box {' ).
+ lo_buf->add( ' border-color: #d3ccd2;' ).
+ lo_buf->add( ' background-color: #ebe3ea;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.path-box,' ).
+ lo_buf->add( 'span.transport-box {' ).
+ lo_buf->add( ' border-color: #a7e3cf;' ).
+ lo_buf->add( ' background-color: #dbf3eb;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* PANELS */' ).
+ lo_buf->add( '/* TODO: add warning and error colors */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.panel.success {' ).
+ lo_buf->add( ' color: #589a58 !important;' ).
+ lo_buf->add( ' background-color: #c5eac5;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.panel.error {' ).
+ lo_buf->add( ' color: #d41919;' ).
+ lo_buf->add( ' background-color: #fad6d6;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '#debug-output { color: var(--theme-debug-color); }' ).
+ lo_buf->add( 'div.dummydiv { background-color: var(--theme-container-background-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* STRUCTURE DIVS, HEADER & FOOTER */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div#header {' ).
+ lo_buf->add( ' background-color: var(--theme-background-color);' ).
+ lo_buf->add( ' border-bottom-color: var(--theme-container-border-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div#header .page-title { color: var(--theme-greyscale-medium); }' ).
+ lo_buf->add( 'div#footer .version { color: var(--theme-greyscale-medium); }' ).
+ lo_buf->add( 'div#footer { border-top-color: var(--theme-container-border-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* ERROR LOG */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.log {' ).
+ lo_buf->add( ' background-color: #fee6e6;' ).
+ lo_buf->add( ' border-color: #fdcece;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* REPOSITORY */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.repo { background-color: var(--theme-container-background-color); }' ).
+ lo_buf->add( '.repo_name span.name { color: #333; }' ).
+ lo_buf->add( '.repo_name span.url { color: var(--theme-primary-font-color-reduced); }' ).
+ lo_buf->add( '.repo_name a.url { color: var(--theme-primary-font-color-reduced); }' ).
+ lo_buf->add( '.repo_name a.url:hover { color: var(--theme-link-color); }' ).
+ lo_buf->add( '.repo_attr { color: grey; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_attr span.bg_marker {' ).
+ lo_buf->add( ' border-color: #d2d2d2;' ).
+ lo_buf->add( ' background-color: #d8d8d8;' ).
+ lo_buf->add( ' color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_attr span.branch_head {' ).
+ lo_buf->add( ' border-color: #d8dff3;' ).
+ lo_buf->add( ' background-color: #eceff9;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.branch {' ).
+ lo_buf->add( ' border-color: #d9d9d9;' ).
+ lo_buf->add( ' background-color: #e2e2e2;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.branch_branch {' ).
+ lo_buf->add( ' border-color: #e7d9b1;' ).
+ lo_buf->add( ' background-color: #f8f0d8;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* REPOSITORY TABLE*/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.repo_tab {' ).
+ lo_buf->add( ' border-color: var(--theme-table-border-color);' ).
+ lo_buf->add( ' background-color: var(--theme-table-background-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_tab th {' ).
+ lo_buf->add( ' color: var(--theme-link-color);' ).
+ lo_buf->add( ' background-color: #edf2f9;' ).
+ lo_buf->add( ' border-bottom-color: var(--theme-table-border-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_tab td {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab tr.object_row{' ).
+ lo_buf->add( ' border-top-color: var(--theme-table-cell-border-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_tab .inactive { color: orange; }' ).
+ lo_buf->add( '.repo_tab tr.unsupported { color: var(--theme-greyscale-lighter); }' ).
+ lo_buf->add( '.repo_tab tr.modified { background-color: #fbf7e9; }' ).
+ lo_buf->add( '.repo_tab td.current_dir { color: var(--theme-primary-font-color-reduced); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* STAGE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.stage_tab {' ).
+ lo_buf->add( ' border-color: #ddd;' ).
+ lo_buf->add( ' background-color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab th {' ).
+ lo_buf->add( ' color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( ' background-color: #edf2f9;' ).
+ lo_buf->add( ' border-bottom-color: #ddd;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab td {' ).
+ lo_buf->add( ' color: var(--theme-greyscale-medium);' ).
+ lo_buf->add( ' border-top-color: var(--theme-table-cell-border-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab td.status {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color-reduced);' ).
+ lo_buf->add( ' background-color: #fafafa;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab td.highlight { color: #444 !important; }' ).
+ lo_buf->add( '.stage_tab td.method { font-weight: bold; }' ).
+ lo_buf->add( '.stage_tab mark {' ).
+ lo_buf->add( ' color: white;' ).
+ lo_buf->add( ' background-color: #79a0d2;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* COMMIT */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.form-container { background-color: #F8F8F8; }' ).
+ lo_buf->add( 'form.aligned-form label { color: var(--theme-greyscale-medium); }' ).
+ lo_buf->add( 'form.aligned-form span.sub-title { color: var(--theme-greyscale-medium); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* SETTINGS STYLES */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.settings_container {' ).
+ lo_buf->add( ' color: #444;' ).
+ lo_buf->add( ' background-color: var(--theme-container-background-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DIFF */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.diff { background-color: var(--theme-container-background-color); }' ).
+ lo_buf->add( 'span.diff_name { color: grey; }' ).
+ lo_buf->add( 'span.diff_name strong { color: #333; }' ).
+ lo_buf->add( 'span.diff_changed_by { color: grey; }' ).
+ lo_buf->add( 'span.diff_changed_by span.user {' ).
+ lo_buf->add( ' border-color: #c2d4ea;' ).
+ lo_buf->add( ' background-color: #d9e4f2;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.diff_ins {' ).
+ lo_buf->add( ' border-color: #abf2ab;' ).
+ lo_buf->add( ' background-color: #e0ffe0;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.diff_del {' ).
+ lo_buf->add( ' border-color: #ff667d;' ).
+ lo_buf->add( ' background-color: #ffccd4;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.diff_upd {' ).
+ lo_buf->add( ' border-color: #dada00;' ).
+ lo_buf->add( ' background-color: #ffffcc;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.diff_content {' ).
+ lo_buf->add( ' background-color: #fff;' ).
+ lo_buf->add( ' border-top-color: #ddd;' ).
+ lo_buf->add( ' border-bottom-color: #ddd;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* STATE BLOCK COLORS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.state-block span.added {' ).
+ lo_buf->add( ' background-color: #69ad74;' ).
+ lo_buf->add( ' border-color: #579e64;' ).
+ lo_buf->add( ' color: white;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.state-block span.changed {' ).
+ lo_buf->add( ' background-color: #e0c150;' ).
+ lo_buf->add( ' border-color: #d4af25;' ).
+ lo_buf->add( ' color: white;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.state-block span.mixed {' ).
+ lo_buf->add( ' background-color: #e0c150;' ).
+ lo_buf->add( ' border-color: #579e64;' ).
+ lo_buf->add( ' color: #69ad74;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.state-block span.deleted {' ).
+ lo_buf->add( ' background-color: #c76861;' ).
+ lo_buf->add( ' border-color: #b8605a;' ).
+ lo_buf->add( ' color: white;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.state-block span.none {' ).
+ lo_buf->add( ' background-color: #e8e8e8;' ).
+ lo_buf->add( ' border-color: #dbdbdb;' ).
+ lo_buf->add( ' color: #c8c8c8;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DIFF TABLE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.diff_tab td,' ).
+ lo_buf->add( 'table.diff_tab th {' ).
+ lo_buf->add( ' color: #444;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab thead.header th {' ).
+ lo_buf->add( ' color: #eee;' ).
+ lo_buf->add( ' background-color: var(--theme-greyscale-medium);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab thead.nav_line {' ).
+ lo_buf->add( ' background-color: #edf2f9;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab thead.nav_line th {' ).
+ lo_buf->add( ' color: var(--theme-greyscale-medium);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab td.num, th.num {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color-reduced);' ).
+ lo_buf->add( ' border-left-color: var(--theme-table-cell-border-color);' ).
+ lo_buf->add( ' border-right-color: var(--theme-table-cell-border-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.diff_tab td.patch, th.patch {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color-reduced);' ).
+ lo_buf->add( ' border-left-color: var(--theme-table-cell-border-color);' ).
+ lo_buf->add( ' border-right-color: var(--theme-table-cell-border-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* STYLES FOR SYNTAX HIGHLIGHTING */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* ABAP */' ).
+ lo_buf->add( '.syntax-hl span.keyword { color: #0a69ce; }' ).
+ lo_buf->add( '.syntax-hl span.text { color: #48ce4f; }' ).
+ lo_buf->add( '.syntax-hl span.comment { color: var(--theme-greyscale-dark); font-style: italic; }' ).
+ lo_buf->add( '/* XML+HTML */' ).
+ lo_buf->add( '.syntax-hl span.xml_tag { color: #457ce3; }' ).
+ lo_buf->add( '.syntax-hl span.attr { color: #b777fb; }' ).
+ lo_buf->add( '.syntax-hl span.attr_val { color: #7a02f9; }' ).
+ lo_buf->add( '/* CSS+JS */' ).
+ lo_buf->add( '.syntax-hl span.properties { color:#0a69ce; }' ).
+ lo_buf->add( '.syntax-hl span.values { color:blue; }' ).
+ lo_buf->add( '.syntax-hl span.units { color:maroon; }' ).
+ lo_buf->add( '.syntax-hl span.selectors { color:purple; }' ).
+ lo_buf->add( '.syntax-hl span.functions { color:purple; }' ).
+ lo_buf->add( '.syntax-hl span.colors { color:purple; }' ).
+ lo_buf->add( '.syntax-hl span.extensions { color:darkblue; }' ).
+ lo_buf->add( '.syntax-hl span.at_rules { color:darkblue; }' ).
+ lo_buf->add( '.syntax-hl span.html { color:green; }' ).
+ lo_buf->add( '.syntax-hl span.variables { color:purple; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DEBUG INFO STYLES */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.debug_container {' ).
+ lo_buf->add( ' color: #444;' ).
+ lo_buf->add( ' background-color: var(--theme-container-background-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* Repo overview */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo-overview { background-color: var(--theme-container-background-color); }' ).
+ lo_buf->add( '.repo-overview table {' ).
+ lo_buf->add( ' background-color: var(--theme-table-background-color);' ).
+ lo_buf->add( ' border-color: var(--theme-table-border-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview th {' ).
+ lo_buf->add( ' color: var(--theme-link-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview thead tr {' ).
+ lo_buf->add( ' background-color: var(--theme-table-head-background-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview thead tr,' ).
+ lo_buf->add( '.repo-overview tfoot tr {' ).
+ lo_buf->add( ' border-color: var(--theme-table-border-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo-overview a.remote_repo { color: var(--theme-primary-font-color-reduced); }' ).
+ lo_buf->add( '.repo-overview a.remote_repo:hover { color: var(--theme-link-color); }' ).
+ lo_buf->add( '.repo-overview tbody tr:hover td { background-color: hsla(214, 50%, 50%, 0.05); }' ).
+ lo_buf->add( '.repo-overview tbody tr.selected { background-color: hsla(214, 50%, 75%, 0.33); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* TUTORIAL */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.tutorial { background-color: var(--theme-container-background-color); }' ).
+ lo_buf->add( 'div.tutorial hr { border-color: var(--theme-greyscale-light); }' ).
+ lo_buf->add( 'div.tutorial h1, h2 { color: #404040; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* MENU */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.nav-container ul li:hover { background-color: #fff; }' ).
+ lo_buf->add( '.nav-container ul ul li:hover { background-color: #f6f6f6; }' ).
+ lo_buf->add( '.nav-container > ul > li:hover > a { background-color: #ffffff80; }' ).
+ lo_buf->add( '.nav-container ul ul { background-color: #fff; }' ).
+ lo_buf->add( '.nav-container.corner > ul > li:hover > a { background-color: inherit; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.nav-container ul ul li.separator {' ).
+ lo_buf->add( ' color: var(--theme-greyscale-medium);' ).
+ lo_buf->add( ' border-bottom-color: #eee;' ).
+ lo_buf->add( ' border-top-color: #eee;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.nav-container ul ul li.separator:hover { background-color: inherit; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* NEWS ANNOUNCEMENT */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.info-panel { background-color: white; }' ).
+ lo_buf->add( 'div.info-panel div.info-hint { color: var(--theme-greyscale-light); }' ).
+ lo_buf->add( 'div.info-panel div.info-title {' ).
+ lo_buf->add( ' color: #f8f8f8;' ).
+ lo_buf->add( ' background-color: #888;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.info-panel div.info-title a.close-btn { color: #d8d8d8; }' ).
+ lo_buf->add( 'div.info-panel div.info-list { color: #444; }' ).
+ lo_buf->add( 'div.info-panel .version-marker {' ).
+ lo_buf->add( ' color: white;' ).
+ lo_buf->add( ' border-color: #c0c0c0;' ).
+ lo_buf->add( ' background-color: var(--theme-greyscale-light);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.info-panel .update {' ).
+ lo_buf->add( ' border-color: #e8ba30;' ).
+ lo_buf->add( ' background-color: #f5c538;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* TOOLTIPS TEXT */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.link-hint { color: var(--theme-primary-font-color); }' ).
+ lo_buf->add( '.link-hint { background-color: var(--theme-linkhint-background) }' ).
+ lo_buf->add( '.link-hint::after { border-top-color: var(--theme-linkhint-background) }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* HOTKEYS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'ul.hotkeys span.key-id {' ).
+ lo_buf->add( ' background-color: #f0f0f0;' ).
+ lo_buf->add( ' border-color: #dcdcdc;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.corner-hint {' ).
+ lo_buf->add( ' color: var(--theme-greyscale-medium);' ).
+ lo_buf->add( ' border-color: var(--theme-greyscale-light);' ).
+ lo_buf->add( ' background-color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* CODE INSPECTOR */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci { background-color: var(--theme-container-background-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci-msg span.ci-variant { color: var(--theme-primary-font-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci-stats span.error-count {' ).
+ lo_buf->add( ' border-color: hsl(350, 100%, 80%);' ).
+ lo_buf->add( ' background-color: hsl(350, 100%, 90%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.ci-stats span.warn-count {' ).
+ lo_buf->add( ' border-color: hsl(60, 100%, 42%);' ).
+ lo_buf->add( ' background-color: hsl(60, 100%, 90%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.ci-stats span.info-count {' ).
+ lo_buf->add( ' border-color: hsl(120, 80%, 80%);' ).
+ lo_buf->add( ' background-color: hsl(120, 80%, 94%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.ci-stats span.all-count {' ).
+ lo_buf->add( ' border-color: hsl(235, 100%, 89%);' ).
+ lo_buf->add( ' background-color: hsl(235, 100%, 93%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.ci-detail table td[data-cid="text"] {' ).
+ lo_buf->add( ' color: hsl(0, 0%, 40%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.ci-detail table tr[data-kind="error"] td[data-cid="kind"] span {' ).
+ lo_buf->add( ' background-color: hsl(0, 100%, 68%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.ci-detail table tr[data-kind="warning"] td[data-cid="kind"] span {' ).
+ lo_buf->add( ' background-color:hsl(52, 100%, 49%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'div.ci-detail table tr[data-kind="info"] td[data-cid="kind"] span {' ).
+ lo_buf->add( ' background-color: hsl(118, 67%, 47%);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* COMMAND PALETTE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.cmd-palette {' ).
+ lo_buf->add( ' border-color: #ccc;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.cmd-palette li.selected {' ).
+ lo_buf->add( ' background-color: hsla(214, 50%, 90%, 1);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.cmd-palette mark {' ).
+ lo_buf->add( ' color: white;' ).
+ lo_buf->add( ' background-color: #79a0d2;' ).
+ lo_buf->add( ' /* todo merge with stage search */' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* SETTINGS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.settings_tab {' ).
+ lo_buf->add( ' background-color: #fff;' ).
+ lo_buf->add( ' border-color: #ddd;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.settings_tab th {' ).
+ lo_buf->add( ' color: #888888;' ).
+ lo_buf->add( ' border-bottom-color: #ddd;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.settings_tab td {' ).
+ lo_buf->add( ' color: #333;' ).
+ lo_buf->add( ' border-top-color: #eee;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.settings_tab input {' ).
+ lo_buf->add( ' background-color: #f8f8f8;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'table.settings_tab input:focus {' ).
+ lo_buf->add( ' background-color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* HTML FORMS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.dialog input::placeholder { color: #ccc }' ).
+ lo_buf->add( '.dialog textarea::placeholder { color: #ccc }' ).
+ lo_buf->add( '.dialog input:-ms-input-placeholder { color: #ccc }' ).
+ lo_buf->add( '.dialog textarea:-ms-input-placeholder { color: #ccc }' ).
+ lo_buf->add( '.dialog {' ).
+ lo_buf->add( ' border-color: #ccc;' ).
+ lo_buf->add( ' background-color: #f0f0f0;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.dialog-commands a,' ).
+ lo_buf->add( '.dialog li.dialog-commands input[type="submit"] {' ).
+ lo_buf->add( ' border-color: #ccc;' ).
+ lo_buf->add( ' background-color: #ddd;' ).
+ lo_buf->add( ' color: #000;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.dialog-commands a.main,' ).
+ lo_buf->add( '.dialog li.dialog-commands input[type="submit"].main {' ).
+ lo_buf->add( ' background-color: #64a8ff;' ).
+ lo_buf->add( ' color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog label {' ).
+ lo_buf->add( ' color: #444;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog label em {' ).
+ lo_buf->add( ' color: #64a8ff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.error small {' ).
+ lo_buf->add( ' color: #ff5959;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.error input[type="number"],' ).
+ lo_buf->add( '.dialog li.error input[type="text"] {' ).
+ lo_buf->add( ' border-color: #ff5959;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog .radio-container {' ).
+ lo_buf->add( ' border-color: #ddd;' ).
+ lo_buf->add( ' background-color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog .radio-container input[type="radio"]:checked + label {' ).
+ lo_buf->add( ' background-color: #64a8ff;' ).
+ lo_buf->add( ' color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.with-command input[type="button"]:hover,' ).
+ lo_buf->add( '.dialog li.with-command input[type="submit"]:hover {' ).
+ lo_buf->add( ' background-color: #64a8ff;' ).
+ lo_buf->add( ' color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog fieldset {' ).
+ lo_buf->add( ' border-color: #dfdfdf;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog fieldset legend {' ).
+ lo_buf->add( ' color: #444;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog input:read-only {' ).
+ lo_buf->add( ' background-color: #f4f4f4;' ).
+ lo_buf->add( ' color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '/* for IE */' ).
+ lo_buf->add( '.dialog input[readonly] {' ).
+ lo_buf->add( ' background-color: #f4f4f4;' ).
+ lo_buf->add( ' color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( '}' ).
+ li_asset_man->register_asset(
+ iv_url = 'css/theme-default.css'
+ iv_type = 'text/css'
+ iv_cacheable = abap_false
+ iv_mime_name = 'ZABAPGIT_CSS_THEME_DEFAULT'
+ iv_inline = lo_buf->join_w_newline_and_flush( ) ).
+
+****************************************************
+* abapmerge Pragma [include] - ZABAPGIT_CSS_THEME_DARK.W3MI.DATA.CSS
+****************************************************
+ lo_buf->add( '/*' ).
+ lo_buf->add( ' * ABAPGIT THEME CSS - DARK' ).
+ lo_buf->add( ' */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* https://experience.sap.com/fiori-design-web/colors/ */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ':root {' ).
+ lo_buf->add( ' --theme-background-color: #333333;' ).
+ lo_buf->add( ' --theme-container-background-color: #444444;' ).
+ lo_buf->add( ' --theme-primary-font: "72", Arial, Helvetica, sans-serif;' ).
+ lo_buf->add( ' --theme-primary-font-color: #cccccc;' ).
+ lo_buf->add( ' --theme-primary-font-color-reduced: #EEEEEE;' ).
+ lo_buf->add( ' --theme-font-size: 11pt;' ).
+ lo_buf->add( ' --theme-link-color: #d9ffff;' ).
+ lo_buf->add( ' --theme-link-color-hover: #f6f6f6;' ).
+ lo_buf->add( ' --theme-container-border-color: #D1E0EE;' ).
+ lo_buf->add( ' --theme-table-border-color: #E5E5E5; /* ALV border color */' ).
+ lo_buf->add( ' --theme-greyscale-dark: #666666;' ).
+ lo_buf->add( ' --theme-greyscale-medium: #999999;' ).
+ lo_buf->add( ' --theme-greyscale-light: #CCCCCC;' ).
+ lo_buf->add( ' --theme-greyscale-lighter: #E5E5E5;' ).
+ lo_buf->add( ' --theme-list-hover-background-color: black;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' --theme-table-background-color: #333333;' ).
+ lo_buf->add( ' --theme-table-head-background-color: #202020;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* GLOBALS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'body {' ).
+ lo_buf->add( ' background-color: var(--theme-background-color);' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'select, input, textarea {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color);' ).
+ lo_buf->add( ' border-color: #ffffff;' ).
+ lo_buf->add( ' background-color: var(--theme-background-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'a:hover { color: var(--theme-link-color-hover); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* HEADER */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '#header a, #header a:visited { color: var(--theme-link-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* MENU */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div#toc .favorites a { opacity: 1; }' ).
+ lo_buf->add( '.nav-container ul a:hover { text-decoration: underline; }' ).
+ lo_buf->add( '.nav-container ul ul { background-color: #555555; }' ).
+ lo_buf->add( '.nav-container ul li:hover { background-color: #555555; }' ).
+ lo_buf->add( '.nav-container ul ul li:hover { background-color: var(--theme-list-hover-background-color); }' ).
+ lo_buf->add( 'table.repo_tab {' ).
+ lo_buf->add( ' border-color: var(--theme-container-background-color);' ).
+ lo_buf->add( ' background-color: var(--theme-background-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* ABAPGIT OBJECTS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.user-box {' ).
+ lo_buf->add( ' background-color: #4c6782;' ).
+ lo_buf->add( ' border-color: #7491b2;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.package-box {' ).
+ lo_buf->add( ' background-color: #705a6d;' ).
+ lo_buf->add( ' border-color: #987095;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( 'span.path-box,' ).
+ lo_buf->add( 'span.transport-box {' ).
+ lo_buf->add( ' background-color: #456d5d;' ).
+ lo_buf->add( ' border-color: #60a087;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* PANELS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '#debug-output { color: var(--theme-greyscale-dark); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* abapGit logo in header and footer */' ).
+ lo_buf->add( '.logo .icon.icon-abapgit {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* TUTORIAL */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.tutorial h1, h2 { color: var(--theme-primary-font-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* REPOSITORY */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.repo { background-color: var(--theme-container-background-color); }' ).
+ lo_buf->add( '.repo_name span.name { color: var(--theme-primary-font-color-reduced); }' ).
+ lo_buf->add( '.repo_name span.url { color: var(--theme-greyscale-medium); }' ).
+ lo_buf->add( '.repo_name a.url { color: var(--theme-greyscale-medium); }' ).
+ lo_buf->add( '.repo_attr { color: var(--theme-primary-font-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'span.branch_branch {' ).
+ lo_buf->add( ' border-color: var(--theme-greyscale-medium);' ).
+ lo_buf->add( ' background-color: #777777;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* REPOSITORY TABLE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab td { color: var(--theme-primary-font-color); }' ).
+ lo_buf->add( '.repo_tab tr.unsupported { background-color: #555; }' ).
+ lo_buf->add( '.repo_tab tr.modified { background-color: #555; }' ).
+ lo_buf->add( '.repo_tab tr:hover {background-color: var(--theme-list-hover-background-color) !important;}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.repo_tab th {' ).
+ lo_buf->add( ' border-top-color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( ' background-color: black;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.repo_tab td {' ).
+ lo_buf->add( ' border-top-color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* STAGE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.stage_tab {' ).
+ lo_buf->add( ' border-color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( ' background-color: var(--theme-background-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab th {' ).
+ lo_buf->add( ' border-top-color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( ' background-color: black;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab td {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color);' ).
+ lo_buf->add( ' border-top-color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab td.status.highlight {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color) !important;' ).
+ lo_buf->add( ' background-color: var(--theme-background-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab td.status {' ).
+ lo_buf->add( ' color: #777;' ).
+ lo_buf->add( ' background-color: var(--theme-background-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.stage_tab th { background-color: var(--theme-container-background-color); }' ).
+ lo_buf->add( '.stage_tab tr:hover {background-color: var(--theme-list-hover-background-color) !important;}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* COMMIT */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.form-container { background-color: var(--theme-background-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* SETTINGS STYLES */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.settings_container { color: var(--theme-primary-font-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DIFF */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.diff_ins { background-color: #352; }' ).
+ lo_buf->add( '.diff_del { background-color: #411; }' ).
+ lo_buf->add( '.diff_upd { background-color: #551; }' ).
+ lo_buf->add( 'div.diff_content { background-color: var(--theme-background-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DIFF TABLE */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.diff_tab td,th { color: #fff; }' ).
+ lo_buf->add( 'table.diff_tab thead.nav_line { background-color: var(--theme-container-background-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* STYLES FOR SYNTAX HIGHLIGHTING */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* ABAP */' ).
+ lo_buf->add( '.syntax-hl span.keyword { color: #4af; }' ).
+ lo_buf->add( '.syntax-hl span.text { color: #8f8; }' ).
+ lo_buf->add( '.syntax-hl span.comment { color: #999; }' ).
+ lo_buf->add( '/* XML+HTML */' ).
+ lo_buf->add( '.syntax-hl span.xml_tag { color: #659cff; }' ).
+ lo_buf->add( '.syntax-hl span.attr { color: #bab2f9; }' ).
+ lo_buf->add( '.syntax-hl span.attr_val { color: #b777fb; }' ).
+ lo_buf->add( '/* CSS+JS */' ).
+ lo_buf->add( '.syntax-hl span.properties { color:#0a69ce; }' ).
+ lo_buf->add( '.syntax-hl span.values { color:blue; }' ).
+ lo_buf->add( '.syntax-hl span.units { color:maroon; }' ).
+ lo_buf->add( '.syntax-hl span.selectors { color:purple; }' ).
+ lo_buf->add( '.syntax-hl span.functions { color:purple; }' ).
+ lo_buf->add( '.syntax-hl span.colors { color:purple; }' ).
+ lo_buf->add( '.syntax-hl span.extensions { color:lightblue; }' ).
+ lo_buf->add( '.syntax-hl span.at_rules { color:lightblue; }' ).
+ lo_buf->add( '.syntax-hl span.html { color:green; }' ).
+ lo_buf->add( '.syntax-hl span.variables { color:purple; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DEBUG INFO STYLES */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.debug_container#debug_info { color: var(--theme-primary-font-color); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DB ENTRIES */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.db_list { background-color: var(--theme-container-background-color); }' ).
+ lo_buf->add( 'table.db_tab td { color: var(--theme-primary-font-color); }' ).
+ lo_buf->add( 'table.db_tab td.data { opacity: 0.5; }' ).
+ lo_buf->add( 'table.db_tab tbody tr:hover, tr:active { background-color: var(--theme-list-hover-background-color); }' ).
+ lo_buf->add( 'table.db_tab th {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color);' ).
+ lo_buf->add( ' border-bottom-color: #333;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'table.db_tab tr.selected {' ).
+ lo_buf->add( ' background: rgba(92, 92, 92, 1) !important;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* ERROR LOGS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'div.log { color: var(--theme-greyscale-dark); }' ).
+ lo_buf->add( '.close-btn, .message-panel, .message-panel-commands a { color: var(--theme-greyscale-dark); }' ).
+ lo_buf->add( '.message-panel-commands a:hover { color: var(--theme-greyscale-dark); }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* DIALOGS */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.dialog {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color-reduced);' ).
+ lo_buf->add( ' background-color: var(--theme-container-background-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.dialog-commands a,' ).
+ lo_buf->add( '.dialog li.dialog-commands input[type="submit"] {' ).
+ lo_buf->add( ' border-color: #ccc;' ).
+ lo_buf->add( ' background-color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( ' color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.dialog-commands a.main,' ).
+ lo_buf->add( '.dialog li.dialog-commands input[type="submit"].main {' ).
+ lo_buf->add( ' background-color: #64a8ff;' ).
+ lo_buf->add( ' color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog label {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog label em {' ).
+ lo_buf->add( ' color: #64a8ff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.error small {' ).
+ lo_buf->add( ' color: #ff5959;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.error input[type="number"],' ).
+ lo_buf->add( '.dialog li.error input[type="text"] {' ).
+ lo_buf->add( ' border-color: #ff5959;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog .radio-container {' ).
+ lo_buf->add( ' border-color: #ddd;' ).
+ lo_buf->add( ' background-color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog .radio-container input[type="radio"] + label {' ).
+ lo_buf->add( ' color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog .radio-container input[type="radio"]:checked + label {' ).
+ lo_buf->add( ' background-color: #64a8ff;' ).
+ lo_buf->add( ' color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog li.with-command input[type="button"]:hover,' ).
+ lo_buf->add( '.dialog li.with-command input[type="submit"]:hover {' ).
+ lo_buf->add( ' background-color: #64a8ff;' ).
+ lo_buf->add( ' color: #fff;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog fieldset {' ).
+ lo_buf->add( ' border-color: #dfdfdf;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog fieldset legend {' ).
+ lo_buf->add( ' color: var(--theme-primary-font-color);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '.dialog input:read-only {' ).
+ lo_buf->add( ' background-color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( ' color: var(--theme-greyscale-medium);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '/* for IE */' ).
+ lo_buf->add( '.dialog input[readonly] {' ).
+ lo_buf->add( ' background-color: var(--theme-greyscale-dark);' ).
+ lo_buf->add( ' color: var(--theme-greyscale-medium);' ).
+ lo_buf->add( '}' ).
+ li_asset_man->register_asset(
+ iv_url = 'css/theme-dark.css'
+ iv_type = 'text/css'
+ iv_cacheable = abap_false
+ iv_mime_name = 'ZABAPGIT_CSS_THEME_DARK'
+ iv_inline = lo_buf->join_w_newline_and_flush( ) ).
+
+****************************************************
+* abapmerge Pragma [include] - ZABAPGIT_CSS_THEME_BELIZE_BLUE.W3MI.DATA.CSS
+****************************************************
+ lo_buf->add( '/*' ).
+ lo_buf->add( ' * ABAPGIT THEME CSS - BELIZE BLUE' ).
+ lo_buf->add( ' */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* https://experience.sap.com/fiori-design-web/colors/ */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ':root {' ).
+ lo_buf->add( ' --fiori-color-global-light-base: #EFF4F9; /* Background in SAP GUI */' ).
+ lo_buf->add( ' --fiori-color-gui-tab-background: #FCFDFE; /* Tabstrip background */' ).
+ lo_buf->add( ' --fiori-color-gui-container-border: #D1E0EE;' ).
+ lo_buf->add( ' --fiori-color-gui-uneditable-background: #F2F2F2; /* Textbox not editable */' ).
+ lo_buf->add( ' --fiori-color-gui-editable-background: #FFFFFF; /* Textbox editable */' ).
+ lo_buf->add( ' --fiori-color-font-primary: #333333; /* Grayscale 1 */' ).
+ lo_buf->add( ' --fiori-color-font-secondary: #666666; /* Grayscale 2 */' ).
+ lo_buf->add( ' --fiori-color-font-highlighted: #003D84;' ).
+ lo_buf->add( ' --fiori-color-message-box-background: #2F3C48; /* Bottom message container */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' --theme-background-color: var(--fiori-color-global-light-base);' ).
+ lo_buf->add( ' --theme-container-background-color: var(--fiori-color-gui-tab-background);' ).
+ lo_buf->add( ' --theme-primary-font: "72", Arial, Helvetica, sans-serif;' ).
+ lo_buf->add( ' --theme-primary-font-color: var(--fiori-color-font-primary);' ).
+ lo_buf->add( ' --theme-primary-font-color-reduced: var(--fiori-color-font-secondary);' ).
+ lo_buf->add( ' --theme-font-size: 11pt;' ).
+ lo_buf->add( ' --theme-link-color: var(--fiori-color-font-highlighted);' ).
+ lo_buf->add( ' --theme-container-border-color: var(--fiori-color-gui-container-border);' ).
+ lo_buf->add( ' --theme-table-border-color: #E5E5E5; /* ALV border color */' ).
+ lo_buf->add( ' --theme-greyscale-dark: #666666;' ).
+ lo_buf->add( ' --theme-greyscale-medium: #BFBFBF;' ).
+ lo_buf->add( ' --theme-greyscale-light: #CCCCCC;' ).
+ lo_buf->add( ' --theme-greyscale-lighter: #E5E5E5;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '#header a, #header a:visited {' ).
+ lo_buf->add( ' color: #346187;' ).
+ lo_buf->add( '}' ).
+ li_asset_man->register_asset(
+ iv_url = 'css/theme-belize-blue.css'
+ iv_type = 'text/css'
+ iv_cacheable = abap_false
+ iv_mime_name = 'ZABAPGIT_CSS_THEME_BELIZE_BLUE'
+ iv_inline = lo_buf->join_w_newline_and_flush( ) ).
+
+****************************************************
+* abapmerge Pragma [include] - ZABAPGIT_JS_COMMON.W3MI.DATA.JS
+****************************************************
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * abapGit JavaScript Function Library' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' Global variables used from outside' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* exported setInitialFocus */' ).
+ lo_buf->add( '/* exported setInitialFocusWithQuerySelector */' ).
+ lo_buf->add( '/* exported submitFormById */' ).
+ lo_buf->add( '/* exported errorStub */' ).
+ lo_buf->add( '/* exported confirmInitialized */' ).
+ lo_buf->add( '/* exported perfOut */' ).
+ lo_buf->add( '/* exported perfLog */' ).
+ lo_buf->add( '/* exported perfClear */' ).
+ lo_buf->add( '/* exported enableArrowListNavigation */' ).
+ lo_buf->add( '/* exported activateLinkHints */' ).
+ lo_buf->add( '/* exported setKeyBindings */' ).
+ lo_buf->add( '/* exported preparePatch */' ).
+ lo_buf->add( '/* exported registerStagePatch */' ).
+ lo_buf->add( '/* exported toggleRepoListDetail */' ).
+ lo_buf->add( '/* exported onTagTypeChange */' ).
+ lo_buf->add( '/* exported getIndocStyleSheet */' ).
+ lo_buf->add( '/* exported addMarginBottom */' ).
+ lo_buf->add( '/* exported enumerateJumpAllFiles */' ).
+ lo_buf->add( '/* exported createRepoCatalogEnumerator */' ).
+ lo_buf->add( '/* exported enumerateUiActions */' ).
+ lo_buf->add( '/* exported onDiffCollapse */' ).
+ lo_buf->add( '/* exported restoreScrollPosition */' ).
+ lo_buf->add( '/* exported toggleBrowserControlWarning */' ).
+ lo_buf->add( '/* exported displayBrowserControlFooter */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Polyfills' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Bind polyfill (for IE7), taken from https://developer.mozilla.org/' ).
+ lo_buf->add( 'if (!Function.prototype.bind) {' ).
+ lo_buf->add( ' Function.prototype.bind = function(oThis) {' ).
+ lo_buf->add( ' if (typeof this !== "function") {' ).
+ lo_buf->add( ' throw new TypeError("Function.prototype.bind - subject is not callable");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var aArgs = Array.prototype.slice.call(arguments, 1);' ).
+ lo_buf->add( ' var fToBind = this;' ).
+ lo_buf->add( ' var fNOP = function() { };' ).
+ lo_buf->add( ' var fBound = function() {' ).
+ lo_buf->add( ' return fToBind.apply(' ).
+ lo_buf->add( ' this instanceof fNOP ? this : oThis,' ).
+ lo_buf->add( ' aArgs.concat(Array.prototype.slice.call(arguments))' ).
+ lo_buf->add( ' );' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (this.prototype) {' ).
+ lo_buf->add( ' fNOP.prototype = this.prototype;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' fBound.prototype = new fNOP();' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' return fBound;' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// String includes polyfill, taken from https://developer.mozilla.org' ).
+ lo_buf->add( 'if (!String.prototype.includes) {' ).
+ lo_buf->add( ' String.prototype.includes = function(search, start) {' ).
+ lo_buf->add( ' "use strict";' ).
+ lo_buf->add( ' if (typeof start !== "number") {' ).
+ lo_buf->add( ' start = 0;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (start + search.length > this.length) {' ).
+ lo_buf->add( ' return false;' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' return this.indexOf(search, start) !== -1;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// String startsWith polyfill, taken from https://developer.mozilla.org' ).
+ lo_buf->add( 'if (!String.prototype.startsWith) {' ).
+ lo_buf->add( ' Object.defineProperty(String.prototype, "startsWith", {' ).
+ lo_buf->add( ' value: function(search, pos) {' ).
+ lo_buf->add( ' pos = !pos || pos < 0 ? 0 : +pos;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' return this.substring(pos, pos + search.length) === search;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// forEach polyfill, taken from https://developer.mozilla.org' ).
+ lo_buf->add( '// used for querySelectorAll results' ).
+ lo_buf->add( 'if (window.NodeList && !NodeList.prototype.forEach) {' ).
+ lo_buf->add( ' NodeList.prototype.forEach = Array.prototype.forEach;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Common functions' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Output text to the debug div' ).
+ lo_buf->add( 'function debugOutput(text, dstID) {' ).
+ lo_buf->add( ' var stdout = document.getElementById(dstID || "debug-output");' ).
+ lo_buf->add( ' var wrapped = "" + text + "
";' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' stdout.innerHTML = stdout.innerHTML + wrapped;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Use a supplied form, a pre-created form or create a hidden form' ).
+ lo_buf->add( '// and submit with sapevent' ).
+ lo_buf->add( 'function submitSapeventForm(params, action, method, form) {' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' function getSapeventPrefix() {' ).
+ lo_buf->add( ' // Depending on the used browser control and its version, different URL schemes' ).
+ lo_buf->add( ' // are used which we distinguish here' ).
+ lo_buf->add( ' if (document.querySelector(''a[href*="file:///SAPEVENT:"]'')) {' ).
+ lo_buf->add( ' // Prefix for old (SAPGUI <= 8.00 PL3) chromium based browser control' ).
+ lo_buf->add( ' return "file:///";' ).
+ lo_buf->add( ' } else if (document.querySelector(''a[href^="sap-cust"]'')) {' ).
+ lo_buf->add( ' // Prefix for new (SAPGUI >= 8.00 PL3 Hotfix 1) chromium based browser control' ).
+ lo_buf->add( ' return "sap-cust://sap-place-holder/";' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' return ""; // No prefix for old IE control' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var stub_form_id = "form_" + action;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' form = form' ).
+ lo_buf->add( ' || document.getElementById(stub_form_id)' ).
+ lo_buf->add( ' || document.createElement("form");' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' form.setAttribute("method", method || "post");' ).
+ lo_buf->add( ' if (/sapevent/i.test(action)) {' ).
+ lo_buf->add( ' form.setAttribute("action", action);' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' form.setAttribute("action", getSapeventPrefix() + "SAPEVENT:" + action);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' for (var key in params) {' ).
+ lo_buf->add( ' var hiddenField = document.createElement("input");' ).
+ lo_buf->add( ' hiddenField.setAttribute("type", "hidden");' ).
+ lo_buf->add( ' hiddenField.setAttribute("name", key);' ).
+ lo_buf->add( ' hiddenField.setAttribute("value", params[key]);' ).
+ lo_buf->add( ' form.appendChild(hiddenField);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var formExistsInDOM = form.id && Boolean(document.querySelector("#" + form.id));' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (form.id !== stub_form_id && !formExistsInDOM) {' ).
+ lo_buf->add( ' document.body.appendChild(form);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' form.submit();' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Set focus to a control' ).
+ lo_buf->add( 'function setInitialFocus(id) {' ).
+ lo_buf->add( ' document.getElementById(id).focus();' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Set focus to an element with query selector' ).
+ lo_buf->add( 'function setInitialFocusWithQuerySelector(sSelector, bFocusParent) {' ).
+ lo_buf->add( ' var oSelected = document.querySelector(sSelector);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (oSelected) {' ).
+ lo_buf->add( ' if (bFocusParent) {' ).
+ lo_buf->add( ' oSelected.parentElement.focus();' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' oSelected.focus();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Submit an existing form' ).
+ lo_buf->add( 'function submitFormById(id) {' ).
+ lo_buf->add( ' document.getElementById(id).submit();' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// JS error stub' ).
+ lo_buf->add( 'function errorStub(event) {' ).
+ lo_buf->add( ' var element = event.target || event.srcElement;' ).
+ lo_buf->add( ' var targetName = element.id || element.name || "???";' ).
+ lo_buf->add( ' alert("JS Error, please log an issue (@" + targetName + ")");' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Confirm JS initialization' ).
+ lo_buf->add( 'function confirmInitialized() {' ).
+ lo_buf->add( ' var errorBanner = document.getElementById("js-error-banner");' ).
+ lo_buf->add( ' if (errorBanner) {' ).
+ lo_buf->add( ' errorBanner.style.display = "none";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' debugOutput("js: OK"); // Final final confirmation :)' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Performance utils (for debugging)' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'var gPerf = [];' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function perfOut(prefix) {' ).
+ lo_buf->add( ' var totals = {};' ).
+ lo_buf->add( ' for (var i = gPerf.length - 1; i >= 0; i--) {' ).
+ lo_buf->add( ' if (!totals[gPerf[i].name]) totals[gPerf[i].name] = { count: 0, time: 0 };' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' totals[gPerf[i].name].time += gPerf[i].time;' ).
+ lo_buf->add( ' totals[gPerf[i].name].count += 1;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var keys = Object.keys(totals);' ).
+ lo_buf->add( ' for (var j = keys.length - 1; j >= 0; j--) {' ).
+ lo_buf->add( ' console.log(prefix' ).
+ lo_buf->add( ' + " " + keys[j] + ": "' ).
+ lo_buf->add( ' + totals[keys[j]].time.toFixed(3) + "ms"' ).
+ lo_buf->add( ' + " (" + totals[keys[j]].count.toFixed() + ")");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function perfLog(name, startTime) {' ).
+ lo_buf->add( ' gPerf.push({ name: name, time: window.performance.now() - startTime });' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function perfClear() {' ).
+ lo_buf->add( ' gPerf = [];' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Repo Overview Logic' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function findStyleSheetByName(name) {' ).
+ lo_buf->add( ' for (var s = 0; s < document.styleSheets.length; s++) {' ).
+ lo_buf->add( ' var styleSheet = document.styleSheets[s];' ).
+ lo_buf->add( ' var classes = styleSheet.cssRules || styleSheet.rules;' ).
+ lo_buf->add( ' for (var i = 0; i < classes.length; i++) {' ).
+ lo_buf->add( ' if (classes[i].selectorText === name) return classes[i];' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function getIndocStyleSheet() {' ).
+ lo_buf->add( ' for (var s = 0; s < document.styleSheets.length; s++) {' ).
+ lo_buf->add( ' if (!document.styleSheets[s].href) return document.styleSheets[s]; // One with empty href' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' // None found ? create one' ).
+ lo_buf->add( ' var style = document.createElement("style");' ).
+ lo_buf->add( ' document.head.appendChild(style);' ).
+ lo_buf->add( ' return style.sheet;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function RepoOverViewHelper(opts) {' ).
+ lo_buf->add( ' if (opts && opts.focusFilterKey) {' ).
+ lo_buf->add( ' this.focusFilterKey = opts.focusFilterKey;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' this.setHooks();' ).
+ lo_buf->add( ' this.pageId = (opts && opts.pageId) ? opts.pageId : "RepoOverViewHelperState";' ).
+ lo_buf->add( ' this.isDetailsDisplayed = false;' ).
+ lo_buf->add( ' this.isOnlyFavoritesDisplayed = false;' ).
+ lo_buf->add( ' this.detailCssClass = findStyleSheetByName(".repo-overview .ro-detail");' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var icon = document.getElementById("icon-filter-detail");' ).
+ lo_buf->add( ' this.toggleFilterIcon(icon, this.isDetailsDisplayed);' ).
+ lo_buf->add( ' this.registerRowSelection();' ).
+ lo_buf->add( ' this.registerKeyboardShortcuts();' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.setHooks = function() {' ).
+ lo_buf->add( ' window.onload = this.onPageLoad.bind(this);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.onPageLoad = function() {' ).
+ lo_buf->add( ' var data = window.localStorage && JSON.parse(window.localStorage.getItem(this.pageId));' ).
+ lo_buf->add( ' if (data) {' ).
+ lo_buf->add( ' if (data.isDetailsDisplayed) {' ).
+ lo_buf->add( ' this.toggleItemsDetail(true);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' if (data.selectedRepoKey) {' ).
+ lo_buf->add( ' this.selectRowByRepoKey(data.selectedRepoKey);' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' this.selectRowByIndex(0);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.registerKeyboardShortcuts = function() {' ).
+ lo_buf->add( ' var self = this;' ).
+ lo_buf->add( ' document.addEventListener("keypress", function(event) {' ).
+ lo_buf->add( ' if (document.activeElement.id === "filter") {' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' if (self.focusFilterKey && event.key === self.focusFilterKey && !CommandPalette.isVisible()) {' ).
+ lo_buf->add( ' var filterInput = document.getElementById("filter");' ).
+ lo_buf->add( ' if (filterInput) filterInput.focus();' ).
+ lo_buf->add( ' event.preventDefault();' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var keycode = event.keyCode;' ).
+ lo_buf->add( ' var rows = Array.prototype.slice.call(self.getVisibleRows());' ).
+ lo_buf->add( ' var selected = document.querySelector(".repo-overview tr.selected");' ).
+ lo_buf->add( ' var indexOfSelected = rows.indexOf(selected);' ).
+ lo_buf->add( ' var lastRow = rows.length - 1;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (keycode == 13 && document.activeElement.tagName.toLowerCase() != "input") {' ).
+ lo_buf->add( ' // "enter" to open, unless command field has focus' ).
+ lo_buf->add( ' self.openSelectedRepo();' ).
+ lo_buf->add( ' } else if ((keycode == 52 || keycode == 56) && indexOfSelected > 0) {' ).
+ lo_buf->add( ' // "4,8" for previous, digits are the numlock keys' ).
+ lo_buf->add( ' // NB: numpad must be activated, keypress does not detect arrows' ).
+ lo_buf->add( ' // if we need arrows it will be keydown. But then mind the keycodes, they may change !' ).
+ lo_buf->add( ' // e.g. 100 is ''d'' with keypress (and conflicts with diff hotkey), and also it is arrow-left keydown' ).
+ lo_buf->add( ' self.selectRowByIndex(indexOfSelected - 1);' ).
+ lo_buf->add( ' } else if ((keycode == 54 || keycode == 50) && indexOfSelected < lastRow) {' ).
+ lo_buf->add( ' // "6,2" for next' ).
+ lo_buf->add( ' self.selectRowByIndex(indexOfSelected + 1);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.openSelectedRepo = function() {' ).
+ lo_buf->add( ' this.selectedRepoKey = document.querySelector(".repo-overview tr.selected").dataset.key;' ).
+ lo_buf->add( ' this.saveLocalStorage();' ).
+ lo_buf->add( ' document.querySelector(".repo-overview tr.selected td.ro-go a").click();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.selectRowByIndex = function(index) {' ).
+ lo_buf->add( ' var rows = this.getVisibleRows();' ).
+ lo_buf->add( ' if (rows.length >= index) {' ).
+ lo_buf->add( ' var selectedRow = rows[index];' ).
+ lo_buf->add( ' if (selectedRow.classList.contains("selected")) {' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.deselectAllRows();' ).
+ lo_buf->add( ' rows[index].classList.add("selected");' ).
+ lo_buf->add( ' this.selectedRepoKey = selectedRow.dataset.key;' ).
+ lo_buf->add( ' this.updateActionLinks(selectedRow);' ).
+ lo_buf->add( ' this.saveLocalStorage();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.selectRowByRepoKey = function(key) {' ).
+ lo_buf->add( ' var attributeQuery = "[data-key=''" + key + "'']";' ).
+ lo_buf->add( ' var row = document.querySelector(".repo-overview tbody tr" + attributeQuery);' ).
+ lo_buf->add( ' // navigation to already selected repo' ).
+ lo_buf->add( ' if (row.dataset.key === key && row.classList.contains("selected")) {' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.deselectAllRows();' ).
+ lo_buf->add( ' row.classList.add("selected");' ).
+ lo_buf->add( ' this.selectedRepoKey = key;' ).
+ lo_buf->add( ' this.updateActionLinks(row);' ).
+ lo_buf->add( ' this.saveLocalStorage();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.updateActionLinks = function(selectedRow) {' ).
+ lo_buf->add( ' // now we have a repo selected, determine which action buttons are relevant' ).
+ lo_buf->add( ' var selectedRepoKey = selectedRow.dataset.key;' ).
+ lo_buf->add( ' var selectedRepoIsOffline = selectedRow.dataset.offline === "X";' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var actionLinks = document.querySelectorAll("a.action_link");' ).
+ lo_buf->add( ' actionLinks.forEach(function(link) {' ).
+ lo_buf->add( ' // adjust repo key in urls' ).
+ lo_buf->add( ' link.href = link.href.replace(/\?key=(#|\d+)/, "?key=" + selectedRepoKey);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // toggle button visibility' ).
+ lo_buf->add( ' if (link.classList.contains("action_offline_repo")) {' ).
+ lo_buf->add( ' if (selectedRepoIsOffline) {' ).
+ lo_buf->add( ' link.parentElement.classList.add("enabled");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' link.parentElement.classList.remove("enabled");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' else if (link.classList.contains("action_online_repo")) {' ).
+ lo_buf->add( ' if (!selectedRepoIsOffline) {' ).
+ lo_buf->add( ' link.parentElement.classList.add("enabled");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' link.parentElement.classList.remove("enabled");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' else {' ).
+ lo_buf->add( ' // if the action is for both repository types, it will only have the .action_link class' ).
+ lo_buf->add( ' // it still needs to be toggled as we want to hide everything if no repo is selected' ).
+ lo_buf->add( ' link.parentElement.classList.add("enabled");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.deselectAllRows = function() {' ).
+ lo_buf->add( ' document.querySelectorAll(".repo-overview tbody tr").forEach(function(x) {' ).
+ lo_buf->add( ' x.classList.remove("selected");' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.getVisibleRows = function() {' ).
+ lo_buf->add( ' return document.querySelectorAll(".repo-overview tbody tr:not(.nodisplay)");' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.registerRowSelection = function() {' ).
+ lo_buf->add( ' var self = this;' ).
+ lo_buf->add( ' document.querySelectorAll(".repo-overview tr td:not(.ro-go)").forEach(function(repoListRowCell) {' ).
+ lo_buf->add( ' repoListRowCell.addEventListener("click", function() {' ).
+ lo_buf->add( ' self.selectRowByRepoKey(this.parentElement.dataset.key);' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' document.querySelectorAll(".repo-overview tr td.ro-go").forEach(function(openRepoIcon) {' ).
+ lo_buf->add( ' openRepoIcon.addEventListener("click", function() {' ).
+ lo_buf->add( ' var selectedRow = this.parentElement;' ).
+ lo_buf->add( ' self.selectRowByRepoKey(selectedRow.dataset.key);' ).
+ lo_buf->add( ' self.openSelectedRepo();' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.toggleRepoListDetail = function(forceDisplay) {' ).
+ lo_buf->add( ' if (this.detailCssClass) {' ).
+ lo_buf->add( ' this.toggleItemsDetail(forceDisplay);' ).
+ lo_buf->add( ' this.saveLocalStorage();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.toggleItemsDetail = function(forceDisplay) {' ).
+ lo_buf->add( ' if (this.detailCssClass) {' ).
+ lo_buf->add( ' this.isDetailsDisplayed = forceDisplay || !this.isDetailsDisplayed;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // change layout to wide if details are displayed' ).
+ lo_buf->add( ' if (this.isDetailsDisplayed) {' ).
+ lo_buf->add( ' document.body.classList.remove("centered");' ).
+ lo_buf->add( ' document.body.classList.add("full_width");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' document.body.classList.add("centered");' ).
+ lo_buf->add( ' document.body.classList.remove("full_width");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.detailCssClass.style.display = this.isDetailsDisplayed ? "" : "none";' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var icon = document.getElementById("icon-filter-detail");' ).
+ lo_buf->add( ' this.toggleFilterIcon(icon, this.isDetailsDisplayed);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.toggleFilterIcon = function(icon, isEnabled) {' ).
+ lo_buf->add( ' if (isEnabled) {' ).
+ lo_buf->add( ' icon.classList.remove("grey");' ).
+ lo_buf->add( ' icon.classList.add("blue");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' icon.classList.remove("blue");' ).
+ lo_buf->add( ' icon.classList.add("grey");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'RepoOverViewHelper.prototype.saveLocalStorage = function() {' ).
+ lo_buf->add( ' if (!window.localStorage) return;' ).
+ lo_buf->add( ' var data = {' ).
+ lo_buf->add( ' isDetailsDisplayed : this.isDetailsDisplayed,' ).
+ lo_buf->add( ' isOnlyFavoritesDisplayed: this.isOnlyFavoritesDisplayed,' ).
+ lo_buf->add( ' selectedRepoKey : this.selectedRepoKey,' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( ' window.localStorage.setItem(this.pageId, JSON.stringify(data));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Staging Logic' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Stage helper constructor' ).
+ lo_buf->add( 'function StageHelper(params) {' ).
+ lo_buf->add( ' this.pageSeed = params.seed;' ).
+ lo_buf->add( ' this.formAction = params.formAction;' ).
+ lo_buf->add( ' this.patchAction = params.patchAction;' ).
+ lo_buf->add( ' this.user = params.user;' ).
+ lo_buf->add( ' this.ids = params.ids;' ).
+ lo_buf->add( ' this.selectedCount = 0;' ).
+ lo_buf->add( ' this.filteredCount = 0;' ).
+ lo_buf->add( ' this.lastFilterValue = "";' ).
+ lo_buf->add( ' this.focusFilterKey = params.focusFilterKey;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // DOM nodes' ).
+ lo_buf->add( ' this.dom = {' ).
+ lo_buf->add( ' stageTab : document.getElementById(params.ids.stageTab),' ).
+ lo_buf->add( ' commitAllBtn : document.getElementById(params.ids.commitAllBtn),' ).
+ lo_buf->add( ' commitSelectedBtn: document.getElementById(params.ids.commitSelectedBtn),' ).
+ lo_buf->add( ' commitFilteredBtn: document.getElementById(params.ids.commitFilteredBtn),' ).
+ lo_buf->add( ' patchBtn : document.getElementById(params.ids.patchBtn),' ).
+ lo_buf->add( ' objectSearch : document.getElementById(params.ids.objectSearch),' ).
+ lo_buf->add( ' selectedCounter : null,' ).
+ lo_buf->add( ' filteredCounter : null,' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( ' this.findCounters();' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Table columns (autodetection)' ).
+ lo_buf->add( ' this.colIndex = this.detectColumns();' ).
+ lo_buf->add( ' this.filterTargets = ["name", "user", "transport"];' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Constants' ).
+ lo_buf->add( ' this.HIGHLIGHT_STYLE = "highlight";' ).
+ lo_buf->add( ' this.STATUS = {' ).
+ lo_buf->add( ' add : "A",' ).
+ lo_buf->add( ' remove : "R",' ).
+ lo_buf->add( ' ignore : "I",' ).
+ lo_buf->add( ' reset : "?",' ).
+ lo_buf->add( ' isValid: function(status) { return "ARI?".indexOf(status) == -1 }' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.TEMPLATES = {' ).
+ lo_buf->add( ' cmdReset : "reset",' ).
+ lo_buf->add( ' cmdLocal : "add",' ).
+ lo_buf->add( ' cmdRemote: "ignoreremove"' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.setHooks();' ).
+ lo_buf->add( ' if (this.user) this.injectFilterMe();' ).
+ lo_buf->add( ' Hotkeys.addHotkeyToHelpSheet("^Enter", "Commit");' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'StageHelper.prototype.findCounters = function() {' ).
+ lo_buf->add( ' this.dom.selectedCounter = this.dom.commitSelectedBtn.querySelector("span.counter");' ).
+ lo_buf->add( ' this.dom.filteredCounter = this.dom.commitFilteredBtn.querySelector("span.counter");' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'StageHelper.prototype.injectFilterMe = function() {' ).
+ lo_buf->add( ' var tabFirstHead = this.dom.stageTab.tHead.rows[0];' ).
+ lo_buf->add( ' if (!tabFirstHead || tabFirstHead.className !== "local") {' ).
+ lo_buf->add( ' return; // for the case only "remove part" is displayed' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' var changedByHead = tabFirstHead.cells[this.colIndex.user];' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' changedByHead.innerText = changedByHead.innerText + " (";' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var a = document.createElement("A");' ).
+ lo_buf->add( ' a.appendChild(document.createTextNode("me"));' ).
+ lo_buf->add( ' a.onclick = this.onFilterMe.bind(this);' ).
+ lo_buf->add( ' a.href = "#";' ).
+ lo_buf->add( ' changedByHead.appendChild(a);' ).
+ lo_buf->add( ' changedByHead.appendChild(document.createTextNode(")"));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'StageHelper.prototype.onFilterMe = function() {' ).
+ lo_buf->add( ' this.dom.objectSearch.value = this.user;' ).
+ lo_buf->add( ' this.onFilter({ type: "keypress", which: 13, target: this.dom.objectSearch });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Hook global click listener on table, load/unload actions' ).
+ lo_buf->add( 'StageHelper.prototype.setHooks = function() {' ).
+ lo_buf->add( ' window.onkeypress = this.onCtrlEnter.bind(this);' ).
+ lo_buf->add( ' this.dom.stageTab.onclick = this.onTableClick.bind(this);' ).
+ lo_buf->add( ' this.dom.commitSelectedBtn.onclick = this.submit.bind(this);' ).
+ lo_buf->add( ' this.dom.commitFilteredBtn.onclick = this.submitVisible.bind(this);' ).
+ lo_buf->add( ' this.dom.patchBtn.onclick = this.submitPatch.bind(this);' ).
+ lo_buf->add( ' this.dom.objectSearch.oninput = this.onFilter.bind(this);' ).
+ lo_buf->add( ' this.dom.objectSearch.onkeypress = this.onFilter.bind(this);' ).
+ lo_buf->add( ' window.onbeforeunload = this.onPageUnload.bind(this);' ).
+ lo_buf->add( ' window.onload = this.onPageLoad.bind(this);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var self = this;' ).
+ lo_buf->add( ' document.addEventListener("keypress", function(event) {' ).
+ lo_buf->add( ' if (document.activeElement.id !== self.ids.objectSearch' ).
+ lo_buf->add( ' && self.focusFilterKey && event.key === self.focusFilterKey' ).
+ lo_buf->add( ' && !CommandPalette.isVisible()) {' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' self.dom.objectSearch.focus();' ).
+ lo_buf->add( ' event.preventDefault();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Detect column index' ).
+ lo_buf->add( 'StageHelper.prototype.detectColumns = function() {' ).
+ lo_buf->add( ' var dataRow = this.dom.stageTab.tBodies[0].rows[0];' ).
+ lo_buf->add( ' var colIndex = {};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' for (var i = dataRow.cells.length - 1; i >= 0; i--) {' ).
+ lo_buf->add( ' if (dataRow.cells[i].className) colIndex[dataRow.cells[i].className] = i;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' return colIndex;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Store table state on leaving the page' ).
+ lo_buf->add( 'StageHelper.prototype.onPageUnload = function() {' ).
+ lo_buf->add( ' if (!window.sessionStorage) return;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var data = this.collectData();' ).
+ lo_buf->add( ' window.sessionStorage.setItem(this.pageSeed, JSON.stringify(data));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Re-store table state on entering the page' ).
+ lo_buf->add( 'StageHelper.prototype.onPageLoad = function() {' ).
+ lo_buf->add( ' var data = window.sessionStorage && JSON.parse(window.sessionStorage.getItem(this.pageSeed));' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.iterateStageTab(true, function(row) {' ).
+ lo_buf->add( ' var status = data && data[row.cells[this.colIndex["name"]].innerText];' ).
+ lo_buf->add( ' this.updateRow(row, status || this.STATUS.reset);' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.updateMenu();' ).
+ lo_buf->add( ' if (this.dom.objectSearch.value) {' ).
+ lo_buf->add( ' this.applyFilterValue(this.dom.objectSearch.value);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Table event handler, change status' ).
+ lo_buf->add( 'StageHelper.prototype.onTableClick = function(event) {' ).
+ lo_buf->add( ' var target = event.target || event.srcElement;' ).
+ lo_buf->add( ' if (!target) return;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var td;' ).
+ lo_buf->add( ' if (target.tagName === "A") {' ).
+ lo_buf->add( ' td = target.parentNode;' ).
+ lo_buf->add( ' } else if (target.tagName === "TD") {' ).
+ lo_buf->add( ' td = target;' ).
+ lo_buf->add( ' if (td.children.length === 1 && td.children[0].tagName === "A") {' ).
+ lo_buf->add( ' target = td.children[0];' ).
+ lo_buf->add( ' } else return;' ).
+ lo_buf->add( ' } else return;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (["TD", "TH"].indexOf(td.tagName) == -1 || td.className != "cmd") return;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var status = this.STATUS[target.innerText]; // Convert anchor text to status' ).
+ lo_buf->add( ' var targetRow = td.parentNode;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (td.tagName === "TD") {' ).
+ lo_buf->add( ' this.updateRow(targetRow, status);' ).
+ lo_buf->add( ' } else { // TH' ).
+ lo_buf->add( ' this.iterateStageTab(true, function(row) {' ).
+ lo_buf->add( ' if (row.style.display !== "none" // Not filtered out' ).
+ lo_buf->add( ' && row.className === targetRow.className // Same context as header' ).
+ lo_buf->add( ' ) {' ).
+ lo_buf->add( ' this.updateRow(row, status);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.updateMenu();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'StageHelper.prototype.onCtrlEnter = function(e) {' ).
+ lo_buf->add( ' if (e.ctrlKey && (e.which === 10 || e.key === "Enter")) {' ).
+ lo_buf->add( ' var clickMap = {' ).
+ lo_buf->add( ' "default" : this.dom.commitAllBtn,' ).
+ lo_buf->add( ' "selected": this.dom.commitSelectedBtn,' ).
+ lo_buf->add( ' "filtered": this.dom.commitFilteredBtn' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( ' clickMap[this.calculateActiveCommitCommand()].click();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Search object' ).
+ lo_buf->add( 'StageHelper.prototype.onFilter = function(e) {' ).
+ lo_buf->add( ' if ( // Enter hit or clear, IE SUCKS !' ).
+ lo_buf->add( ' e.type === "input" && !e.target.value && this.lastFilterValue' ).
+ lo_buf->add( ' || e.type === "keypress" && (e.which === 13 || e.key === "Enter") && !e.ctrlKey) {' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.applyFilterValue(e.target.value);' ).
+ lo_buf->add( ' submitSapeventForm({ filterValue: e.target.value }, "stage_filter", "post");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'StageHelper.prototype.applyFilterValue = function(sFilterValue) {' ).
+ lo_buf->add( ' this.lastFilterValue = sFilterValue;' ).
+ lo_buf->add( ' this.filteredCount = this.iterateStageTab(true, this.applyFilterToRow, sFilterValue);' ).
+ lo_buf->add( ' this.updateMenu();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Apply filter to a single stage line - hide or show' ).
+ lo_buf->add( 'StageHelper.prototype.applyFilterToRow = function(row, filter) {' ).
+ lo_buf->add( ' // Collect data cells' ).
+ lo_buf->add( ' var targets = this.filterTargets.map(function(attr) {' ).
+ lo_buf->add( ' // Get the innermost tag with the text we want to filter' ).
+ lo_buf->add( ' // text : elem = td-tag' ).
+ lo_buf->add( ' // text : elem = a-tag' ).
+ lo_buf->add( ' var elem = row.cells[this.colIndex[attr]];' ).
+ lo_buf->add( ' var elemA = elem.getElementsByTagName("A")[0];' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (elemA) elem = elemA;' ).
+ lo_buf->add( ' return {' ).
+ lo_buf->add( ' elem : elem,' ).
+ lo_buf->add( ' plainText: elem.innerText.replace(/ /g, "\u00a0"), // without tags, with encoded spaces' ).
+ lo_buf->add( ' curHtml : elem.innerHTML' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( ' }, this);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var isVisible = false;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Apply filter to cells, mark filtered text' ).
+ lo_buf->add( ' for (var i = targets.length - 1; i >= 0; i--) {' ).
+ lo_buf->add( ' var target = targets[i];' ).
+ lo_buf->add( ' // Ignore case of filter' ).
+ lo_buf->add( ' var regFilter = new RegExp("(" + filter + ")", "gi");' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' target.newHtml = (filter)' ).
+ lo_buf->add( ' ? target.plainText.replace(regFilter, "$1")' ).
+ lo_buf->add( ' : target.plainText;' ).
+ lo_buf->add( ' target.isChanged = target.newHtml !== target.curHtml;' ).
+ lo_buf->add( ' isVisible = isVisible || !filter || target.newHtml !== target.plainText;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Update DOM' ).
+ lo_buf->add( ' row.style.display = isVisible ? "" : "none";' ).
+ lo_buf->add( ' for (var j = targets.length - 1; j >= 0; j--) {' ).
+ lo_buf->add( ' if (targets[j].isChanged) targets[j].elem.innerHTML = targets[j].newHtml;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' return isVisible ? 1 : 0;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Get how status should affect object counter' ).
+ lo_buf->add( 'StageHelper.prototype.getStatusImpact = function(status) {' ).
+ lo_buf->add( ' if (typeof status !== "string"' ).
+ lo_buf->add( ' || status.length !== 1' ).
+ lo_buf->add( ' || this.STATUS.isValid(status)) {' ).
+ lo_buf->add( ' alert("Unknown status");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' return (status !== this.STATUS.reset) ? 1: 0;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Update table line' ).
+ lo_buf->add( 'StageHelper.prototype.updateRow = function(row, newStatus) {' ).
+ lo_buf->add( ' var oldStatus = row.cells[this.colIndex["status"]].innerText;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (oldStatus !== newStatus) {' ).
+ lo_buf->add( ' this.updateRowStatus(row, newStatus);' ).
+ lo_buf->add( ' this.updateRowCommand(row, newStatus);' ).
+ lo_buf->add( ' } else if (!row.cells[this.colIndex["cmd"]].children.length) {' ).
+ lo_buf->add( ' this.updateRowCommand(row, newStatus); // For initial run' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.selectedCount += this.getStatusImpact(newStatus) - this.getStatusImpact(oldStatus);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Update Status cell (render set of commands)' ).
+ lo_buf->add( 'StageHelper.prototype.updateRowStatus = function(row, status) {' ).
+ lo_buf->add( ' row.cells[this.colIndex["status"]].innerText = status;' ).
+ lo_buf->add( ' if (status === this.STATUS.reset) {' ).
+ lo_buf->add( ' row.cells[this.colIndex["status"]].classList.remove(this.HIGHLIGHT_STYLE);' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' row.cells[this.colIndex["status"]].classList.add(this.HIGHLIGHT_STYLE);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Update Command cell (render set of commands)' ).
+ lo_buf->add( 'StageHelper.prototype.updateRowCommand = function(row, status) {' ).
+ lo_buf->add( ' var cell = row.cells[this.colIndex["cmd"]];' ).
+ lo_buf->add( ' if (status === this.STATUS.reset) {' ).
+ lo_buf->add( ' cell.innerHTML = (row.className == "local")' ).
+ lo_buf->add( ' ? this.TEMPLATES.cmdLocal' ).
+ lo_buf->add( ' : this.TEMPLATES.cmdRemote;' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' cell.innerHTML = this.TEMPLATES.cmdReset;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'StageHelper.prototype.calculateActiveCommitCommand = function() {' ).
+ lo_buf->add( ' var active;' ).
+ lo_buf->add( ' if (this.selectedCount > 0) {' ).
+ lo_buf->add( ' active = "selected";' ).
+ lo_buf->add( ' } else if (this.lastFilterValue) {' ).
+ lo_buf->add( ' active = "filtered";' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' active = "default";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' return active;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Update menu items visibility' ).
+ lo_buf->add( 'StageHelper.prototype.updateMenu = function() {' ).
+ lo_buf->add( ' var display = this.calculateActiveCommitCommand();' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (display === "selected") this.dom.selectedCounter.innerText = this.selectedCount.toString();' ).
+ lo_buf->add( ' if (display === "filtered") this.dom.filteredCounter.innerText = this.filteredCount.toString();' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.dom.commitAllBtn.style.display = display === "default" ? "" : "none";' ).
+ lo_buf->add( ' this.dom.commitSelectedBtn.style.display = display === "selected" ? "" : "none";' ).
+ lo_buf->add( ' this.dom.commitFilteredBtn.style.display = display === "filtered" ? "" : "none";' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Submit stage state to the server' ).
+ lo_buf->add( 'StageHelper.prototype.submit = function() {' ).
+ lo_buf->add( ' submitSapeventForm(this.collectData(), this.formAction);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'StageHelper.prototype.submitVisible = function() {' ).
+ lo_buf->add( ' this.markVisiblesAsAdded();' ).
+ lo_buf->add( ' submitSapeventForm(this.collectData(), this.formAction);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'StageHelper.prototype.submitPatch = function() {' ).
+ lo_buf->add( ' submitSapeventForm(this.collectData(), this.patchAction);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Extract data from the table' ).
+ lo_buf->add( 'StageHelper.prototype.collectData = function() {' ).
+ lo_buf->add( ' var data = {};' ).
+ lo_buf->add( ' this.iterateStageTab(false, function(row) {' ).
+ lo_buf->add( ' data[row.cells[this.colIndex["name"]].innerText] = row.cells[this.colIndex["status"]].innerText;' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' return data;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'StageHelper.prototype.markVisiblesAsAdded = function() {' ).
+ lo_buf->add( ' this.iterateStageTab(false, function(row) {' ).
+ lo_buf->add( ' // TODO refactor, unify updateRow logic' ).
+ lo_buf->add( ' if (row.style.display === "" && row.className === "local") { // visible' ).
+ lo_buf->add( ' this.updateRow(row, this.STATUS.add);' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' this.updateRow(row, this.STATUS.reset);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Table iteration helper' ).
+ lo_buf->add( 'StageHelper.prototype.iterateStageTab = function(changeMode, cb /*, ...*/) {' ).
+ lo_buf->add( ' var restArgs = Array.prototype.slice.call(arguments, 2);' ).
+ lo_buf->add( ' var table = this.dom.stageTab;' ).
+ lo_buf->add( ' var retTotal = 0;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (changeMode) {' ).
+ lo_buf->add( ' var scrollOffset = window.pageYOffset;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.dom.stageTab.style.display = "none";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' for (var b = 0, bN = table.tBodies.length; b < bN; b++) {' ).
+ lo_buf->add( ' var tbody = table.tBodies[b];' ).
+ lo_buf->add( ' for (var r = 0, rN = tbody.rows.length; r < rN; r++) {' ).
+ lo_buf->add( ' var args = [tbody.rows[r]].concat(restArgs);' ).
+ lo_buf->add( ' var retVal = cb.apply(this, args); // callback' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (typeof retVal === "number") retTotal += retVal;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (changeMode) {' ).
+ lo_buf->add( ' this.dom.stageTab.style.display = "";' ).
+ lo_buf->add( ' window.scrollTo(0, scrollOffset);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' return retTotal;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Check List Wrapper' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function CheckListWrapper(id, cbAction, cbActionOnlyMyChanges) {' ).
+ lo_buf->add( ' this.id = document.getElementById(id);' ).
+ lo_buf->add( ' this.cbAction = cbAction;' ).
+ lo_buf->add( ' this.cbActionOnlyMyChanges = cbActionOnlyMyChanges;' ).
+ lo_buf->add( ' this.id.onclick = this.onClick.bind(this);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CheckListWrapper.prototype.onClick = function(e) { // eslint-disable-line no-unused-vars' ).
+ lo_buf->add( ' // Get nodes' ).
+ lo_buf->add( ' var target = event.target || event.srcElement;' ).
+ lo_buf->add( ' if (!target) return;' ).
+ lo_buf->add( ' if (target.tagName !== "A") { target = target.parentNode } // icon clicked' ).
+ lo_buf->add( ' if (target.tagName !== "A") return;' ).
+ lo_buf->add( ' if (target.parentNode.tagName !== "LI") return;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var nodeA = target;' ).
+ lo_buf->add( ' var nodeLi = target.parentNode;' ).
+ lo_buf->add( ' var nodeIcon = target.children[0];' ).
+ lo_buf->add( ' if (!nodeIcon.classList.contains("icon")) return;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Node updates' ).
+ lo_buf->add( ' var option = nodeA.innerText;' ).
+ lo_buf->add( ' var oldState = nodeLi.getAttribute("data-check");' ).
+ lo_buf->add( ' if (oldState === null) return; // no data-check attribute - non-checkbox' ).
+ lo_buf->add( ' var newState = oldState === "X" ? false : true;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (newState) {' ).
+ lo_buf->add( ' nodeIcon.classList.remove("grey");' ).
+ lo_buf->add( ' nodeIcon.classList.add("blue");' ).
+ lo_buf->add( ' nodeLi.setAttribute("data-check", "X");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' nodeIcon.classList.remove("blue");' ).
+ lo_buf->add( ' nodeIcon.classList.add("grey");' ).
+ lo_buf->add( ' nodeLi.setAttribute("data-check", "");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Action callback, special handling for "Only My Changes"' ).
+ lo_buf->add( ' if (option === "Only my changes") {' ).
+ lo_buf->add( ' this.cbActionOnlyMyChanges(nodeLi.getAttribute("data-aux"), newState);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // hide "Changed By" menu' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' this.cbAction(nodeLi.getAttribute("data-aux"), option, newState);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Diff Page Logic' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Diff helper constructor' ).
+ lo_buf->add( 'function DiffHelper(params) {' ).
+ lo_buf->add( ' this.pageSeed = params.seed;' ).
+ lo_buf->add( ' this.counter = 0;' ).
+ lo_buf->add( ' this.stageAction = params.stageAction;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // DOM nodes' ).
+ lo_buf->add( ' this.dom = {' ).
+ lo_buf->add( ' diffList : document.getElementById(params.ids.diffList),' ).
+ lo_buf->add( ' stageButton: document.getElementById(params.ids.stageButton)' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.repoKey = this.dom.diffList.getAttribute("data-repo-key");' ).
+ lo_buf->add( ' if (!this.repoKey) return; // Unexpected' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.dom.jump = document.getElementById(params.ids.jump);' ).
+ lo_buf->add( ' this.dom.jump.onclick = this.onJump.bind(this);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Checklist wrapper' ).
+ lo_buf->add( ' if (document.getElementById(params.ids.filterMenu)) {' ).
+ lo_buf->add( ' this.checkList = new CheckListWrapper(params.ids.filterMenu, this.onFilter.bind(this), this.onFilterOnlyMyChanges.bind(this));' ).
+ lo_buf->add( ' this.dom.filterButton = document.getElementById(params.ids.filterMenu).parentNode;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Hijack stage command' ).
+ lo_buf->add( ' if (this.dom.stageButton) {' ).
+ lo_buf->add( ' this.dom.stageButton.href = "#";' ).
+ lo_buf->add( ' this.dom.stageButton.onclick = this.onStage.bind(this);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Action on jump click' ).
+ lo_buf->add( 'DiffHelper.prototype.onJump = function(e) {' ).
+ lo_buf->add( ' var text = ((e.target && e.target.text) || e);' ).
+ lo_buf->add( ' if (!text) return;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var elFile = document.querySelector("[data-file*=''" + text + "'']");' ).
+ lo_buf->add( ' if (!elFile) return;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' setTimeout(function() {' ).
+ lo_buf->add( ' elFile.scrollIntoView();' ).
+ lo_buf->add( ' }, 100);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Action on filter click' ).
+ lo_buf->add( 'DiffHelper.prototype.onFilter = function(attr, target, state) {' ).
+ lo_buf->add( ' this.applyFilter(attr, target, state);' ).
+ lo_buf->add( ' this.highlightButton(state);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'DiffHelper.prototype.onFilterOnlyMyChanges = function(username, state) {' ).
+ lo_buf->add( ' this.applyOnlyMyChangesFilter(username, state);' ).
+ lo_buf->add( ' this.counter = 0;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (state) {' ).
+ lo_buf->add( ' this.dom.filterButton.classList.add("bgorange");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' this.dom.filterButton.classList.remove("bgorange");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // apply logic on Changed By list items' ).
+ lo_buf->add( ' var changedByListItems = Array.prototype.slice.call(document.querySelectorAll("[data-aux*=changed-by]"));' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' changedByListItems' ).
+ lo_buf->add( ' .map(function(item) {' ).
+ lo_buf->add( ' var nodeIcon = item.children[0].children[0];' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (state === true) {' ).
+ lo_buf->add( ' if (item.innerText === username) { // current user' ).
+ lo_buf->add( ' item.style.display = "";' ).
+ lo_buf->add( ' item.setAttribute("data-check", "X");' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (nodeIcon) {' ).
+ lo_buf->add( ' nodeIcon.classList.remove("grey");' ).
+ lo_buf->add( ' nodeIcon.classList.add("blue");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' } else { // other users' ).
+ lo_buf->add( ' item.style.display = "none";' ).
+ lo_buf->add( ' item.setAttribute("data-check", "");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' item.style.display = "";' ).
+ lo_buf->add( ' item.setAttribute("data-check", "X");' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (nodeIcon) {' ).
+ lo_buf->add( ' nodeIcon.classList.remove("grey");' ).
+ lo_buf->add( ' nodeIcon.classList.add("blue");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'DiffHelper.prototype.applyOnlyMyChangesFilter = function(username, state) {' ).
+ lo_buf->add( ' var jumpListItems = Array.prototype.slice.call(document.querySelectorAll("[id*=li_jump]"));' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.iterateDiffList(function(div) {' ).
+ lo_buf->add( ' if (state === true) { // switching on "Only my changes" filter' ).
+ lo_buf->add( ' if (div.getAttribute("data-changed-by") === username) {' ).
+ lo_buf->add( ' div.style.display = state ? "" : "none";' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' div.style.display = state ? "none" : "";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' } else { // disabling' ).
+ lo_buf->add( ' div.style.display = "";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // hide the file in the jump list' ).
+ lo_buf->add( ' var dataFile = div.getAttribute("data-file");' ).
+ lo_buf->add( ' jumpListItems' ).
+ lo_buf->add( ' .filter(function(item) { return dataFile.includes(item.text) })' ).
+ lo_buf->add( ' .map(function(item) { item.style.display = div.style.display });' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Hide/show diff based on params' ).
+ lo_buf->add( 'DiffHelper.prototype.applyFilter = function(attr, target, state) {' ).
+ lo_buf->add( ' var jumpListItems = Array.prototype.slice.call(document.querySelectorAll("[id*=li_jump]"));' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.iterateDiffList(function(div) {' ).
+ lo_buf->add( ' if (div.getAttribute("data-" + attr) === target) {' ).
+ lo_buf->add( ' div.style.display = state ? "" : "none";' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // hide the file in the jump list' ).
+ lo_buf->add( ' var dataFile = div.getAttribute("data-file");' ).
+ lo_buf->add( ' jumpListItems' ).
+ lo_buf->add( ' .filter(function(item) { return dataFile.includes(item.text) })' ).
+ lo_buf->add( ' .map(function(item) { item.style.display = div.style.display });' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Action on stage -> save visible diffs as state for stage page' ).
+ lo_buf->add( 'DiffHelper.prototype.onStage = function(e) { // eslint-disable-line no-unused-vars' ).
+ lo_buf->add( ' if (window.sessionStorage) {' ).
+ lo_buf->add( ' var data = this.buildStageCache();' ).
+ lo_buf->add( ' window.sessionStorage.setItem(this.pageSeed, JSON.stringify(data));' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' var getParams = { key: this.repoKey, seed: this.pageSeed };' ).
+ lo_buf->add( ' submitSapeventForm(getParams, this.stageAction, "get");' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Collect visible diffs' ).
+ lo_buf->add( 'DiffHelper.prototype.buildStageCache = function() {' ).
+ lo_buf->add( ' var list = {};' ).
+ lo_buf->add( ' this.iterateDiffList(function(div) {' ).
+ lo_buf->add( ' var filename = div.getAttribute("data-file");' ).
+ lo_buf->add( ' if (!div.style.display && filename) { // No display override - visible !!' ).
+ lo_buf->add( ' list[filename] = "A"; // Add' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' return list;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Table iterator' ).
+ lo_buf->add( 'DiffHelper.prototype.iterateDiffList = function(cb /*, ...*/) {' ).
+ lo_buf->add( ' var restArgs = Array.prototype.slice.call(arguments, 1);' ).
+ lo_buf->add( ' var diffList = this.dom.diffList;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' for (var i = 0, iN = diffList.children.length; i < iN; i++) {' ).
+ lo_buf->add( ' var div = diffList.children[i];' ).
+ lo_buf->add( ' if (div.className !== "diff") continue;' ).
+ lo_buf->add( ' var args = [div].concat(restArgs);' ).
+ lo_buf->add( ' cb.apply(this, args);// callback' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Highlight filter button if filter is activated' ).
+ lo_buf->add( 'DiffHelper.prototype.highlightButton = function(state) {' ).
+ lo_buf->add( ' this.counter += state ? -1 : 1;' ).
+ lo_buf->add( ' if (this.counter > 0) {' ).
+ lo_buf->add( ' this.dom.filterButton.classList.add("bgorange");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' this.dom.filterButton.classList.remove("bgorange");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Collapse or expand diffs' ).
+ lo_buf->add( 'function onDiffCollapse(event) {' ).
+ lo_buf->add( ' var source = event.target || event.srcElement;' ).
+ lo_buf->add( ' var nextDiffContent = source.parentElement.nextElementSibling;' ).
+ lo_buf->add( ' var hide;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (source.classList.contains("icon-chevron-down")) {' ).
+ lo_buf->add( ' source.classList.remove("icon-chevron-down");' ).
+ lo_buf->add( ' source.classList.add("icon-chevron-right");' ).
+ lo_buf->add( ' hide = true;' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' source.classList.remove("icon-chevron-right");' ).
+ lo_buf->add( ' source.classList.add("icon-chevron-down");' ).
+ lo_buf->add( ' hide = false;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' hide ? nextDiffContent.classList.add("nodisplay"): nextDiffContent.classList.remove("nodisplay");' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Add bottom margin, so that we can scroll to the top of the last file' ).
+ lo_buf->add( 'function addMarginBottom() {' ).
+ lo_buf->add( ' document.getElementsByTagName("body")[0].style.marginBottom = screen.height + "px";' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Diff Page Column Selection' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function DiffColumnSelection() {' ).
+ lo_buf->add( ' this.selectedColumnIdx = -1;' ).
+ lo_buf->add( ' this.lineNumColumnIdx = -1;' ).
+ lo_buf->add( ' //https://stackoverflow.com/questions/2749244/javascript-setinterval-and-this-solution' ).
+ lo_buf->add( ' document.addEventListener("mousedown", this.mousedownEventListener.bind(this));' ).
+ lo_buf->add( ' document.addEventListener("copy", this.copyEventListener.bind(this));' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'DiffColumnSelection.prototype.mousedownEventListener = function(e) {' ).
+ lo_buf->add( ' // Select text in a column of an HTML table and copy to clipboard (in DIFF view)' ).
+ lo_buf->add( ' // (https://stackoverflow.com/questions/6619805/select-text-in-a-column-of-an-html-table)' ).
+ lo_buf->add( ' // Process mousedown event for all TD elements -> apply CSS class at TABLE level.' ).
+ lo_buf->add( ' // (https://stackoverflow.com/questions/40956717/how-to-addeventlistener-to-multiple-elements-in-a-single-line)' ).
+ lo_buf->add( ' var unifiedLineNumColumnIdx = 0;' ).
+ lo_buf->add( ' var unifiedCodeColumnIdx = 3;' ).
+ lo_buf->add( ' var splitLineNumLeftColumnIdx = 0;' ).
+ lo_buf->add( ' var splitCodeLeftColumnIdx = 2;' ).
+ lo_buf->add( ' var splitLineNumRightColumnIdx = 3;' ).
+ lo_buf->add( ' var splitCodeRightColumnIdx = 5;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (e.button !== 0) return; // function is only valid for left button, not right button' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var td = e.target;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' while (td != undefined && td.tagName != "TD" && td.tagName != "TBODY") td = td.parentElement;' ).
+ lo_buf->add( ' if (td == undefined) return;' ).
+ lo_buf->add( ' var table = td.parentElement.parentElement;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var patchColumnCount = 0;' ).
+ lo_buf->add( ' if (td.parentElement.cells[0].classList.contains("patch")) {' ).
+ lo_buf->add( ' patchColumnCount = 1;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (td.classList.contains("diff_left")) {' ).
+ lo_buf->add( ' table.classList.remove("diff_select_right");' ).
+ lo_buf->add( ' table.classList.add("diff_select_left");' ).
+ lo_buf->add( ' if (window.getSelection() && this.selectedColumnIdx != splitCodeLeftColumnIdx + patchColumnCount) {' ).
+ lo_buf->add( ' // De-select to avoid effect of dragging selection in case the right column was first selected' ).
+ lo_buf->add( ' if (document.body.createTextRange) { // All IE but Edge' ).
+ lo_buf->add( ' // document.getSelection().removeAllRanges() may trigger error' ).
+ lo_buf->add( ' // so use this code which is equivalent but does not fail' ).
+ lo_buf->add( ' // (https://stackoverflow.com/questions/22914075/javascript-error-800a025e-using-range-selector)' ).
+ lo_buf->add( ' range = document.body.createTextRange();' ).
+ lo_buf->add( ' range.collapse();' ).
+ lo_buf->add( ' range.select();' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' document.getSelection().removeAllRanges();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' this.selectedColumnIdx = splitCodeLeftColumnIdx + patchColumnCount;' ).
+ lo_buf->add( ' this.lineNumColumnIdx = splitLineNumLeftColumnIdx + patchColumnCount;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' } else if (td.classList.contains("diff_right")) {' ).
+ lo_buf->add( ' table.classList.remove("diff_select_left");' ).
+ lo_buf->add( ' table.classList.add("diff_select_right");' ).
+ lo_buf->add( ' if (window.getSelection() && this.selectedColumnIdx != splitCodeRightColumnIdx + patchColumnCount) {' ).
+ lo_buf->add( ' if (document.body.createTextRange) { // All IE but Edge' ).
+ lo_buf->add( ' // document.getSelection().removeAllRanges() may trigger error' ).
+ lo_buf->add( ' // so use this code which is equivalent but does not fail' ).
+ lo_buf->add( ' // (https://stackoverflow.com/questions/22914075/javascript-error-800a025e-using-range-selector)' ).
+ lo_buf->add( ' var range = document.body.createTextRange();' ).
+ lo_buf->add( ' range.collapse();' ).
+ lo_buf->add( ' range.select();' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' document.getSelection().removeAllRanges();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' this.selectedColumnIdx = splitCodeRightColumnIdx + patchColumnCount;' ).
+ lo_buf->add( ' this.lineNumColumnIdx = splitLineNumRightColumnIdx + patchColumnCount;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' } else if (td.classList.contains("diff_unified")) {' ).
+ lo_buf->add( ' this.selectedColumnIdx = unifiedCodeColumnIdx;' ).
+ lo_buf->add( ' this.lineNumColumnIdx = unifiedLineNumColumnIdx;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' this.selectedColumnIdx = -1;' ).
+ lo_buf->add( ' this.lineNumColumnIdx = -1;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'DiffColumnSelection.prototype.copyEventListener = function(e) {' ).
+ lo_buf->add( ' // Select text in a column of an HTML table and copy to clipboard (in DIFF view)' ).
+ lo_buf->add( ' // (https://stackoverflow.com/questions/6619805/select-text-in-a-column-of-an-html-table)' ).
+ lo_buf->add( ' var td = e.target;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' while (td != undefined && td.tagName != "TD" && td.tagName != "TBODY") td = td.parentElement;' ).
+ lo_buf->add( ' if (td != undefined) {' ).
+ lo_buf->add( ' // Use window.clipboardData instead of e.clipboardData' ).
+ lo_buf->add( ' // (https://stackoverflow.com/questions/23470958/ie-10-copy-paste-issue)' ).
+ lo_buf->add( ' var clipboardData = (e.clipboardData == undefined ? window.clipboardData : e.clipboardData);' ).
+ lo_buf->add( ' var text = this.getSelectedText();' ).
+ lo_buf->add( ' clipboardData.setData("text", text);' ).
+ lo_buf->add( ' e.preventDefault();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'DiffColumnSelection.prototype.getSelectedText = function() {' ).
+ lo_buf->add( ' // Select text in a column of an HTML table and copy to clipboard (in DIFF view)' ).
+ lo_buf->add( ' // (https://stackoverflow.com/questions/6619805/select-text-in-a-column-of-an-html-table)' ).
+ lo_buf->add( ' var sel = window.getSelection();' ).
+ lo_buf->add( ' var range = sel.getRangeAt(0);' ).
+ lo_buf->add( ' var doc = range.cloneContents();' ).
+ lo_buf->add( ' var nodes = doc.querySelectorAll("tr");' ).
+ lo_buf->add( ' var text = "";' ).
+ lo_buf->add( ' if (nodes.length === 0) {' ).
+ lo_buf->add( ' text = doc.textContent;' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' var newline = "";' ).
+ lo_buf->add( ' var realThis = this;' ).
+ lo_buf->add( ' var copySide = "";' ).
+ lo_buf->add( ' [].forEach.call(nodes, function(tr, i) {' ).
+ lo_buf->add( ' var cellIdx = (i == 0 ? 0 : realThis.selectedColumnIdx);' ).
+ lo_buf->add( ' if (tr.cells.length > cellIdx) {' ).
+ lo_buf->add( ' var tdSelected = tr.cells[cellIdx];' ).
+ lo_buf->add( ' // decide which side to copy based on first line of selection' ).
+ lo_buf->add( ' if (i == 0) {' ).
+ lo_buf->add( ' copySide = (tdSelected.classList.contains("new") ? "new" : "old" );' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' // copy is interesting only for one side of code, do not copy lines which exist on other side' ).
+ lo_buf->add( ' if (i == 0 || copySide == "new" && !tdSelected.classList.contains("old") || copySide == "old" && !tdSelected.classList.contains("new")) {' ).
+ lo_buf->add( ' text += newline + tdSelected.textContent;' ).
+ lo_buf->add( ' // special processing for TD tag which sometimes contains newline' ).
+ lo_buf->add( ' // (expl: /src/ui/zabapgit_js_common.w3mi.data.js) so do not add newline again in that case.' ).
+ lo_buf->add( ' var lastChar = tdSelected.textContent[tdSelected.textContent.length - 1];' ).
+ lo_buf->add( ' if (lastChar == "\n") newline = "";' ).
+ lo_buf->add( ' else newline = "\n";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' return text;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Display Helper' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Toggle display of changelog (news) and message popups' ).
+ lo_buf->add( 'function toggleDisplay(divId) {' ).
+ lo_buf->add( ' var div = document.getElementById(divId);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (div) div.style.display = (div.style.display) ? "" : "none";' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Keyboard Navigation' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function KeyNavigation() { }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'KeyNavigation.prototype.onkeydown = function(event) {' ).
+ lo_buf->add( ' if (event.defaultPrevented) return;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // navigate with arrows through list items and support pressing links with enter and space' ).
+ lo_buf->add( ' var isHandled = false;' ).
+ lo_buf->add( ' if (event.key === "Enter" || event.key === "") {' ).
+ lo_buf->add( ' isHandled = this.onEnterOrSpace();' ).
+ lo_buf->add( ' } else if (/Down$/.test(event.key)) {' ).
+ lo_buf->add( ' isHandled = this.onArrowDown();' ).
+ lo_buf->add( ' } else if (/Up$/.test(event.key)) {' ).
+ lo_buf->add( ' isHandled = this.onArrowUp();' ).
+ lo_buf->add( ' } else if (event.key === "Backspace") {' ).
+ lo_buf->add( ' isHandled = this.onBackspace();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (isHandled) event.preventDefault();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'KeyNavigation.prototype.onEnterOrSpace = function() {' ).
+ lo_buf->add( ' if (document.activeElement.nodeName !== "A") return;' ).
+ lo_buf->add( ' var anchor = document.activeElement;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (anchor.href.replace(/#$/, "") === document.location.href.replace(/#$/, "")' ).
+ lo_buf->add( ' && !anchor.onclick' ).
+ lo_buf->add( ' && anchor.parentElement' ).
+ lo_buf->add( ' && anchor.parentElement.nodeName === "LI") {' ).
+ lo_buf->add( ' anchor.parentElement.classList.toggle("force-nav-hover");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' anchor.click();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' return true;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'KeyNavigation.prototype.focusListItem = function(li) {' ).
+ lo_buf->add( ' var anchor = li.firstElementChild;' ).
+ lo_buf->add( ' if (!anchor || anchor.nodeName !== "A") return false;' ).
+ lo_buf->add( ' anchor.focus();' ).
+ lo_buf->add( ' return true;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'KeyNavigation.prototype.closeDropdown = function(dropdownLi) {' ).
+ lo_buf->add( ' dropdownLi.classList.remove("force-nav-hover");' ).
+ lo_buf->add( ' if (dropdownLi.firstElementChild.nodeName === "A") dropdownLi.firstElementChild.focus();' ).
+ lo_buf->add( ' return true;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'KeyNavigation.prototype.onBackspace = function() {' ).
+ lo_buf->add( ' var activeElement = document.activeElement;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Detect opened subsequent dropdown' ).
+ lo_buf->add( ' if (activeElement.nodeName === "A"' ).
+ lo_buf->add( ' && activeElement.parentElement' ).
+ lo_buf->add( ' && activeElement.parentElement.nodeName === "LI"' ).
+ lo_buf->add( ' && activeElement.parentElement.classList.contains("force-nav-hover")) {' ).
+ lo_buf->add( ' return this.closeDropdown(activeElement.parentElement);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Detect opened parent dropdown' ).
+ lo_buf->add( ' if (activeElement.nodeName === "A"' ).
+ lo_buf->add( ' && activeElement.parentElement' ).
+ lo_buf->add( ' && activeElement.parentElement.nodeName === "LI"' ).
+ lo_buf->add( ' && activeElement.parentElement.parentElement' ).
+ lo_buf->add( ' && activeElement.parentElement.parentElement.nodeName === "UL"' ).
+ lo_buf->add( ' && activeElement.parentElement.parentElement.parentElement' ).
+ lo_buf->add( ' && activeElement.parentElement.parentElement.parentElement.nodeName === "LI"' ).
+ lo_buf->add( ' && activeElement.parentElement.parentElement.parentElement.classList.contains("force-nav-hover")) {' ).
+ lo_buf->add( ' return this.closeDropdown(activeElement.parentElement.parentElement.parentElement);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'KeyNavigation.prototype.onArrowDown = function() {' ).
+ lo_buf->add( ' var activeElement = document.activeElement;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Start of dropdown list: LI > selected A :: UL > LI > A' ).
+ lo_buf->add( ' if (activeElement.nodeName === "A"' ).
+ lo_buf->add( ' && activeElement.parentElement' ).
+ lo_buf->add( ' && activeElement.parentElement.nodeName === "LI"' ).
+ lo_buf->add( ' && activeElement.parentElement.classList.contains("force-nav-hover") // opened dropdown' ).
+ lo_buf->add( ' && activeElement.nextElementSibling' ).
+ lo_buf->add( ' && activeElement.nextElementSibling.nodeName === "UL"' ).
+ lo_buf->add( ' && activeElement.nextElementSibling.firstElementChild' ).
+ lo_buf->add( ' && activeElement.nextElementSibling.firstElementChild.nodeName === "LI") {' ).
+ lo_buf->add( ' return this.focusListItem(activeElement.nextElementSibling.firstElementChild);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Next item of dropdown list: ( LI > selected A ) :: LI > A' ).
+ lo_buf->add( ' if (activeElement.nodeName === "A"' ).
+ lo_buf->add( ' && activeElement.parentElement' ).
+ lo_buf->add( ' && activeElement.parentElement.nodeName === "LI"' ).
+ lo_buf->add( ' && activeElement.parentElement.nextElementSibling' ).
+ lo_buf->add( ' && activeElement.parentElement.nextElementSibling.nodeName === "LI") {' ).
+ lo_buf->add( ' return this.focusListItem(activeElement.parentElement.nextElementSibling);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'KeyNavigation.prototype.onArrowUp = function() {' ).
+ lo_buf->add( ' var activeElement = document.activeElement;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Prev item of dropdown list: ( LI > selected A ) <:: LI > A' ).
+ lo_buf->add( ' if (activeElement.nodeName === "A"' ).
+ lo_buf->add( ' && activeElement.parentElement' ).
+ lo_buf->add( ' && activeElement.parentElement.nodeName === "LI"' ).
+ lo_buf->add( ' && activeElement.parentElement.previousElementSibling' ).
+ lo_buf->add( ' && activeElement.parentElement.previousElementSibling.nodeName === "LI") {' ).
+ lo_buf->add( ' return this.focusListItem(activeElement.parentElement.previousElementSibling);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'KeyNavigation.prototype.getHandler = function() {' ).
+ lo_buf->add( ' return this.onkeydown.bind(this);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// this function enables the navigation with arrows through list items (li)' ).
+ lo_buf->add( '// e.g. in dropdown menus' ).
+ lo_buf->add( 'function enableArrowListNavigation() {' ).
+ lo_buf->add( ' document.addEventListener("keydown", new KeyNavigation().getHandler());' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Link Hints (Vimium-like)' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function LinkHints(linkHintHotKey) {' ).
+ lo_buf->add( ' this.linkHintHotKey = linkHintHotKey;' ).
+ lo_buf->add( ' this.areHintsDisplayed = false;' ).
+ lo_buf->add( ' this.pendingPath = ""; // already typed code prefix' ).
+ lo_buf->add( ' this.hintsMap = this.deployHintContainers();' ).
+ lo_buf->add( ' this.activatedDropdown = null;' ).
+ lo_buf->add( ' this.yankModeActive = false;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.getHintStartValue = function(targetsCount) {' ).
+ lo_buf->add( ' // e.g. if we have 89 tooltips we start from 10' ).
+ lo_buf->add( ' // if we have 90 tooltips we start from 100' ).
+ lo_buf->add( ' // if we have 900 tooltips we start from 1000' ).
+ lo_buf->add( ' var' ).
+ lo_buf->add( ' baseLength = Math.pow(10, targetsCount.toString().length - 1),' ).
+ lo_buf->add( ' maxHintStringLength = (targetsCount + baseLength).toString().length;' ).
+ lo_buf->add( ' return Math.pow(10, maxHintStringLength - 1);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.deployHintContainers = function() {' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var hintTargets = document.querySelectorAll("a, input, textarea, i");' ).
+ lo_buf->add( ' var codeCounter = this.getHintStartValue(hintTargets.length);' ).
+ lo_buf->add( ' var hintsMap = { first: codeCounter };' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // ' ).
+ lo_buf->add( ' // 123' ).
+ lo_buf->add( ' // ' ).
+ lo_buf->add( ' for (var i = 0, N = hintTargets.length; i < N; i++) {' ).
+ lo_buf->add( ' // skip hidden fields' ).
+ lo_buf->add( ' if (hintTargets[i].type === "HIDDEN") {' ).
+ lo_buf->add( ' continue;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var hint = {};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' hint.container = document.createElement("span");' ).
+ lo_buf->add( ' hint.pendingSpan = document.createElement("span");' ).
+ lo_buf->add( ' hint.remainingSpan = document.createElement("span");' ).
+ lo_buf->add( ' hint.parent = hintTargets[i];' ).
+ lo_buf->add( ' hint.code = codeCounter.toString();' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' hint.container.appendChild(hint.pendingSpan);' ).
+ lo_buf->add( ' hint.container.appendChild(hint.remainingSpan);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' hint.pendingSpan.classList.add("pending");' ).
+ lo_buf->add( ' hint.container.classList.add("link-hint");' ).
+ lo_buf->add( ' if (hint.parent.nodeName === "INPUT" || hint.parent.nodeName === "TEXTAREA") {' ).
+ lo_buf->add( ' hint.container.classList.add("link-hint-input");' ).
+ lo_buf->add( ' } else if (hint.parent.nodeName === "A") {' ).
+ lo_buf->add( ' hint.container.classList.add("link-hint-a");' ).
+ lo_buf->add( ' } else if (hint.parent.nodeName === "I" && hint.parent.classList.contains("cursor-pointer")) {' ).
+ lo_buf->add( ' hint.container.classList.add("link-hint-i");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' continue;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' hint.container.classList.add("nodisplay"); // hide by default' ).
+ lo_buf->add( ' hint.container.dataset.code = codeCounter.toString(); // not really needed, more for debug' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (hintTargets[i].nodeName === "INPUT" || hintTargets[i].nodeName === "TEXTAREA") {' ).
+ lo_buf->add( ' // does not work if inside the input node' ).
+ lo_buf->add( ' if (hintTargets[i].type === "checkbox" || hintTargets[i].type === "radio") {' ).
+ lo_buf->add( ' if (hintTargets[i].nextElementSibling && hintTargets[i].nextElementSibling.nodeName === "LABEL") {' ).
+ lo_buf->add( ' // insert at end of label' ).
+ lo_buf->add( ' hintTargets[i].nextElementSibling.appendChild(hint.container);' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' // inserting right after' ).
+ lo_buf->add( ' hintTargets[i].insertAdjacentElement("afterend", hint.container);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' // inserting right after' ).
+ lo_buf->add( ' hintTargets[i].insertAdjacentElement("afterend", hint.container);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' hintTargets[i].appendChild(hint.container);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' hintsMap[codeCounter++] = hint;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' hintsMap.last = codeCounter - 1;' ).
+ lo_buf->add( ' return hintsMap;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.getHandler = function() {' ).
+ lo_buf->add( ' return this.handleKey.bind(this);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.handleKey = function(event) {' ).
+ lo_buf->add( ' if (event.defaultPrevented) {' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (event.key === "y") {' ).
+ lo_buf->add( ' this.yankModeActive = !this.yankModeActive;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (event.key === this.linkHintHotKey && Hotkeys.isHotkeyCallPossible()) {' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // on user hide hints, close an opened dropdown too' ).
+ lo_buf->add( ' if (this.areHintsDisplayed && this.activatedDropdown) this.closeActivatedDropdown();' ).
+ lo_buf->add( ' if (this.areHintsDisplayed) this.yankModeActive = false;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.pendingPath = "";' ).
+ lo_buf->add( ' this.displayHints(!this.areHintsDisplayed);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' } else if (this.areHintsDisplayed) {' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // the user tries to reach a hint' ).
+ lo_buf->add( ' this.pendingPath += event.key;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var hint = this.hintsMap[this.pendingPath];' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (hint) { // we are there, we have a fully specified tooltip. Let us activate or yank it' ).
+ lo_buf->add( ' this.displayHints(false);' ).
+ lo_buf->add( ' event.preventDefault();' ).
+ lo_buf->add( ' if (this.yankModeActive) {' ).
+ lo_buf->add( ' submitSapeventForm({ clipboard: hint.parent.firstChild.textContent }, "clipboard");' ).
+ lo_buf->add( ' this.yankModeActive = false;' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' this.hintActivate(hint);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' // we are not there yet, but let us filter the link so that only' ).
+ lo_buf->add( ' // the partially matched are shown' ).
+ lo_buf->add( ' var visibleHints = this.filterHints();' ).
+ lo_buf->add( ' if (!visibleHints) {' ).
+ lo_buf->add( ' this.displayHints(false);' ).
+ lo_buf->add( ' if (this.activatedDropdown) this.closeActivatedDropdown();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.closeActivatedDropdown = function() {' ).
+ lo_buf->add( ' if (!this.activatedDropdown) return;' ).
+ lo_buf->add( ' this.activatedDropdown.classList.remove("force-nav-hover");' ).
+ lo_buf->add( ' this.activatedDropdown = null;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.displayHints = function(isActivate) {' ).
+ lo_buf->add( ' this.areHintsDisplayed = isActivate;' ).
+ lo_buf->add( ' for (var i = this.hintsMap.first; i <= this.hintsMap.last; i++) {' ).
+ lo_buf->add( ' var hint = this.hintsMap[i];' ).
+ lo_buf->add( ' if (isActivate) {' ).
+ lo_buf->add( ' hint.container.classList.remove("nodisplay");' ).
+ lo_buf->add( ' hint.pendingSpan.innerText = "";' ).
+ lo_buf->add( ' hint.remainingSpan.innerText = hint.code;' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' hint.container.classList.add("nodisplay");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.hintActivate = function(hint) {' ).
+ lo_buf->add( ' if (hint.parent.nodeName === "A"' ).
+ lo_buf->add( ' // hint.parent.href doesn`t have a # at the end while accessing dropdowns the first time.' ).
+ lo_buf->add( ' // Seems like a idiosyncrasy of SAP GUI`s IE. So let`s ignore the last character.' ).
+ lo_buf->add( ' && (hint.parent.href.substr(0, hint.parent.href.length - 1) === document.location.href)// href is #' ).
+ lo_buf->add( ' && !hint.parent.onclick // no handler' ).
+ lo_buf->add( ' && hint.parent.parentElement && hint.parent.parentElement.nodeName === "LI") {' ).
+ lo_buf->add( ' // probably it is a dropdown ...' ).
+ lo_buf->add( ' this.activatedDropdown = hint.parent.parentElement;' ).
+ lo_buf->add( ' this.activatedDropdown.classList.toggle("force-nav-hover");' ).
+ lo_buf->add( ' hint.parent.focus();' ).
+ lo_buf->add( ' } else if (hint.parent.type === "checkbox") {' ).
+ lo_buf->add( ' this.toggleCheckbox(hint);' ).
+ lo_buf->add( ' } else if (hint.parent.type === "radio") {' ).
+ lo_buf->add( ' this.toggleRadioButton(hint);' ).
+ lo_buf->add( ' } else if (hint.parent.type === "submit") {' ).
+ lo_buf->add( ' hint.parent.click();' ).
+ lo_buf->add( ' } else if (hint.parent.nodeName === "INPUT" || hint.parent.nodeName === "TEXTAREA") {' ).
+ lo_buf->add( ' hint.parent.focus();' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' hint.parent.click();' ).
+ lo_buf->add( ' if (this.activatedDropdown) this.closeActivatedDropdown();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.toggleCheckbox = function(hint) {' ).
+ lo_buf->add( ' var checked = hint.parent.checked;' ).
+ lo_buf->add( ' this.triggerClickHandler(hint.parent.parentElement);' ).
+ lo_buf->add( ' if (checked === hint.parent.checked) {' ).
+ lo_buf->add( ' // fallback if no handler is registered' ).
+ lo_buf->add( ' hint.parent.checked = !hint.parent.checked;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.toggleRadioButton = function(hint) {' ).
+ lo_buf->add( ' this.triggerClickHandler(hint.parent);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.triggerClickHandler = function(el) {' ).
+ lo_buf->add( ' // ensures that onclick handler is executed' ).
+ lo_buf->add( ' // https://stackoverflow.com/questions/41981509/trigger-an-event-when-a-checkbox-is-changed-programmatically-via-javascript' ).
+ lo_buf->add( ' var event = document.createEvent("HTMLEvents");' ).
+ lo_buf->add( ' event.initEvent("click", false, true);' ).
+ lo_buf->add( ' el.dispatchEvent(event);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'LinkHints.prototype.filterHints = function() {' ).
+ lo_buf->add( ' var visibleHints = 0;' ).
+ lo_buf->add( ' for (var i = this.hintsMap.first; i <= this.hintsMap.last; i++) {' ).
+ lo_buf->add( ' var hint = this.hintsMap[i];' ).
+ lo_buf->add( ' if (i.toString().startsWith(this.pendingPath)) {' ).
+ lo_buf->add( ' hint.pendingSpan.innerText = this.pendingPath;' ).
+ lo_buf->add( ' hint.remainingSpan.innerText = hint.code.substring(this.pendingPath.length);' ).
+ lo_buf->add( ' // hint.container.classList.remove("nodisplay"); // for backspace' ).
+ lo_buf->add( ' visibleHints++;' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' hint.container.classList.add("nodisplay");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' return visibleHints;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function activateLinkHints(linkHintHotKey) {' ).
+ lo_buf->add( ' if (!linkHintHotKey) return;' ).
+ lo_buf->add( ' var oLinkHint = new LinkHints(linkHintHotKey);' ).
+ lo_buf->add( ' document.addEventListener("keypress", oLinkHint.getHandler());' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Hotkeys' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function Hotkeys(oKeyMap) {' ).
+ lo_buf->add( ' this.oKeyMap = oKeyMap || {};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // these are the hotkeys provided by the backend' ).
+ lo_buf->add( ' Object.keys(this.oKeyMap).forEach(function(sKey) {' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var action = this.oKeyMap[sKey];' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // add a tooltip/title with the hotkey, currently only sapevents are supported' ).
+ lo_buf->add( ' this.getAllSapEventsForSapEventName(action).forEach(function(elAnchor) {' ).
+ lo_buf->add( ' elAnchor.title = elAnchor.title + " [" + sKey + "]";' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // We replace the actions with callback functions to unify' ).
+ lo_buf->add( ' // the hotkey execution' ).
+ lo_buf->add( ' this.oKeyMap[sKey] = function(oEvent) {' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // gHelper is only valid for diff page' ).
+ lo_buf->add( ' var diffHelper = (window.gHelper || {});' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // We have either a js function on this' ).
+ lo_buf->add( ' if (this[action]) {' ).
+ lo_buf->add( ' this[action].call(this);' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Or a method of the helper object for the diff page' ).
+ lo_buf->add( ' if (diffHelper[action]) {' ).
+ lo_buf->add( ' diffHelper[action].call(diffHelper);' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Or a global function' ).
+ lo_buf->add( ' if (window[action] && typeof (window[action]) === "function") {' ).
+ lo_buf->add( ' window[action].call(this);' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Or a SAP event link' ).
+ lo_buf->add( ' var sUiSapEventHref = this.getSapEventHref(action);' ).
+ lo_buf->add( ' if (sUiSapEventHref) {' ).
+ lo_buf->add( ' submitSapeventForm({}, sUiSapEventHref, "post");' ).
+ lo_buf->add( ' oEvent.preventDefault();' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Or an SAP event input' ).
+ lo_buf->add( ' var sUiSapEventInputAction = this.getSapEventInputAction(action);' ).
+ lo_buf->add( ' if (sUiSapEventInputAction) {' ).
+ lo_buf->add( ' submitSapeventForm({}, sUiSapEventInputAction, "post");' ).
+ lo_buf->add( ' oEvent.preventDefault();' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // Or an SAP event main form' ).
+ lo_buf->add( ' var elForm = this.getSapEventForm(action);' ).
+ lo_buf->add( ' if (elForm) {' ).
+ lo_buf->add( ' elForm.submit();' ).
+ lo_buf->add( ' oEvent.preventDefault();' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' }.bind(this));' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Hotkeys.prototype.showHotkeys = function() {' ).
+ lo_buf->add( ' var elHotkeys = document.querySelector("#hotkeys");' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (elHotkeys) {' ).
+ lo_buf->add( ' elHotkeys.style.display = (elHotkeys.style.display) ? "" : "none";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Hotkeys.prototype.getAllSapEventsForSapEventName = function (sSapEvent) {' ).
+ lo_buf->add( ' if (/^#+$/.test(sSapEvent)){' ).
+ lo_buf->add( ' // sSapEvent contains only #. Nothing sensible can be done here' ).
+ lo_buf->add( ' return [];' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var includesSapEvent = function(text){' ).
+ lo_buf->add( ' return (text.includes("sapevent") || text.includes("SAPEVENT"));' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' return [].slice' ).
+ lo_buf->add( ' .call(document.querySelectorAll("a[href*="+ sSapEvent +"], input[formaction*="+ sSapEvent+"]"))' ).
+ lo_buf->add( ' .filter(function (elem) {' ).
+ lo_buf->add( ' return (elem.nodeName === "A" && includesSapEvent(elem.href)' ).
+ lo_buf->add( ' || (elem.nodeName === "INPUT" && includesSapEvent(elem.formAction)));' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Hotkeys.prototype.getSapEventHref = function(sSapEvent) {' ).
+ lo_buf->add( ' return this.getAllSapEventsForSapEventName(sSapEvent)' ).
+ lo_buf->add( ' .filter(function(el) {' ).
+ lo_buf->add( ' // only anchors' ).
+ lo_buf->add( ' return (!!el.href);' ).
+ lo_buf->add( ' })' ).
+ lo_buf->add( ' .map(function(oSapEvent) {' ).
+ lo_buf->add( ' return oSapEvent.href;' ).
+ lo_buf->add( ' })' ).
+ lo_buf->add( ' .filter(this.eliminateSapEventFalsePositives(sSapEvent))' ).
+ lo_buf->add( ' .pop();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Hotkeys.prototype.getSapEventInputAction = function(sSapEvent) {' ).
+ lo_buf->add( ' return this.getAllSapEventsForSapEventName(sSapEvent)' ).
+ lo_buf->add( ' .filter(function(el) {' ).
+ lo_buf->add( ' // input forms' ).
+ lo_buf->add( ' return (el.type === "submit");' ).
+ lo_buf->add( ' })' ).
+ lo_buf->add( ' .map(function(oSapEvent) {' ).
+ lo_buf->add( ' return oSapEvent.formAction;' ).
+ lo_buf->add( ' })' ).
+ lo_buf->add( ' .filter(this.eliminateSapEventFalsePositives(sSapEvent))' ).
+ lo_buf->add( ' .pop();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Hotkeys.prototype.getSapEventForm = function(sSapEvent) {' ).
+ lo_buf->add( ' return this.getAllSapEventsForSapEventName(sSapEvent)' ).
+ lo_buf->add( ' .filter(function(el) {' ).
+ lo_buf->add( ' // forms' ).
+ lo_buf->add( ' var parentForm = el.parentNode.parentNode.parentNode;' ).
+ lo_buf->add( ' return (el.type === "submit" && parentForm.nodeName === "FORM");' ).
+ lo_buf->add( ' })' ).
+ lo_buf->add( ' .map(function(oSapEvent) {' ).
+ lo_buf->add( ' return oSapEvent.parentNode.parentNode.parentNode;' ).
+ lo_buf->add( ' })' ).
+ lo_buf->add( ' .pop();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Hotkeys.prototype.eliminateSapEventFalsePositives = function(sapEvent) {' ).
+ lo_buf->add( ' return function(sapEventAttr) {' ).
+ lo_buf->add( ' return sapEventAttr.match(new RegExp("\\b" + sapEvent + "\\b"));' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Hotkeys.prototype.onkeydown = function(oEvent) {' ).
+ lo_buf->add( ' if (oEvent.defaultPrevented) {' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (!Hotkeys.isHotkeyCallPossible()) {' ).
+ lo_buf->add( ' return;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var' ).
+ lo_buf->add( ' sKey = oEvent.key || String.fromCharCode(oEvent.keyCode),' ).
+ lo_buf->add( ' fnHotkey = this.oKeyMap[sKey];' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (fnHotkey) {' ).
+ lo_buf->add( ' fnHotkey.call(this, oEvent);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Hotkeys.isHotkeyCallPossible = function() {' ).
+ lo_buf->add( ' var activeElementType = ((document.activeElement && document.activeElement.nodeName) || "");' ).
+ lo_buf->add( ' var activeElementReadOnly = ((document.activeElement && document.activeElement.readOnly) || false);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' return (activeElementReadOnly || (activeElementType !== "INPUT" && activeElementType !== "TEXTAREA"));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Hotkeys.addHotkeyToHelpSheet = function(key, description) {' ).
+ lo_buf->add( ' var hotkeysUl = document.querySelector("#hotkeys ul.hotkeys");' ).
+ lo_buf->add( ' if (!hotkeysUl) return;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var li = document.createElement("li");' ).
+ lo_buf->add( ' var spanId = document.createElement("span");' ).
+ lo_buf->add( ' var spanDescr = document.createElement("span");' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' spanId.className = "key-id";' ).
+ lo_buf->add( ' spanId.innerText = key;' ).
+ lo_buf->add( ' spanDescr.className = "key-descr";' ).
+ lo_buf->add( ' spanDescr.innerText = description;' ).
+ lo_buf->add( ' li.appendChild(spanId);' ).
+ lo_buf->add( ' li.appendChild(spanDescr);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' hotkeysUl.appendChild(li);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function setKeyBindings(oKeyMap) {' ).
+ lo_buf->add( ' var oHotkeys = new Hotkeys(oKeyMap);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' document.addEventListener("keypress", oHotkeys.onkeydown.bind(oHotkeys));' ).
+ lo_buf->add( ' setTimeout(function() {' ).
+ lo_buf->add( ' var div = document.getElementById("hotkeys-hint");' ).
+ lo_buf->add( ' if (div) div.style.opacity = 0.2;' ).
+ lo_buf->add( ' }, 4900);' ).
+ lo_buf->add( ' setTimeout(function() { toggleDisplay("hotkeys-hint") }, 5000);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Patch Logic (git add -p)' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/*' ).
+ lo_buf->add( ' We have three type of cascading checkboxes.' ).
+ lo_buf->add( ' Which means that by clicking a file or section checkbox all corresponding line checkboxes are checked.' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' The id of the checkbox indicates its semantics and its membership.' ).
+ lo_buf->add( '*/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/*' ).
+ lo_buf->add( ' 1) file links' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' example id of file link' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' patch_file_zcl_abapgit_user_exit.clas.abap' ).
+ lo_buf->add( ' \________/ \_____________________________/' ).
+ lo_buf->add( ' | |' ).
+ lo_buf->add( ' | |____ file name' ).
+ lo_buf->add( ' |' ).
+ lo_buf->add( ' |' ).
+ lo_buf->add( ' |' ).
+ lo_buf->add( ' constant prefix' ).
+ lo_buf->add( '*/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function PatchFile(sId) {' ).
+ lo_buf->add( ' var oRegex = new RegExp("(" + this.ID + ")_(.*$)");' ).
+ lo_buf->add( ' var oMatch = sId.match(oRegex);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.id = sId;' ).
+ lo_buf->add( ' this.prefix = oMatch[1];' ).
+ lo_buf->add( ' this.file_name = oMatch[2];' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'PatchFile.prototype.ID = "patch_file";' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/*' ).
+ lo_buf->add( ' 2) section links within a file' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' example id of section link' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' patch_section_zcl_abapgit_user_exit.clas.abap_1' ).
+ lo_buf->add( ' \___________/ \_____________________________/ ^' ).
+ lo_buf->add( ' | | |' ).
+ lo_buf->add( ' | file name |' ).
+ lo_buf->add( ' | |' ).
+ lo_buf->add( ' | ------ section' ).
+ lo_buf->add( ' |' ).
+ lo_buf->add( ' constant prefix' ).
+ lo_buf->add( '*/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function PatchSection(sId) {' ).
+ lo_buf->add( ' var oRegex = new RegExp("(" + this.ID + ")_(.*)_(\\d+$)");' ).
+ lo_buf->add( ' var oMatch = sId.match(oRegex);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.id = sId;' ).
+ lo_buf->add( ' this.prefix = oMatch[1];' ).
+ lo_buf->add( ' this.file_name = oMatch[2];' ).
+ lo_buf->add( ' this.section = oMatch[3];' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'PatchSection.prototype.ID = "patch_section";' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/*' ).
+ lo_buf->add( ' 3) line links within a section' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' example id of line link' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' patch_line_zcl_abapgit_user_exit.clas.abap_1_25' ).
+ lo_buf->add( ' \________/ \_____________________________/ ^ ^' ).
+ lo_buf->add( ' ^ ^ | |' ).
+ lo_buf->add( ' | | | ------- line number' ).
+ lo_buf->add( ' | file name |' ).
+ lo_buf->add( ' | section' ).
+ lo_buf->add( ' |' ).
+ lo_buf->add( ' |' ).
+ lo_buf->add( ' constant prefix' ).
+ lo_buf->add( '*/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function PatchLine() { }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'PatchLine.prototype.ID = "patch_line";' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function Patch() { }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.ID = {' ).
+ lo_buf->add( ' STAGE: "stage"' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.ACTION = {' ).
+ lo_buf->add( ' PATCH_STAGE : "patch_stage",' ).
+ lo_buf->add( ' REFRESH_LOCAL: "refresh_local",' ).
+ lo_buf->add( ' REFRESH_ALL : "refresh_all"' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.escape = function(sFileName) {' ).
+ lo_buf->add( ' return sFileName' ).
+ lo_buf->add( ' .replace(/\./g, "\\.")' ).
+ lo_buf->add( ' .replace(/#/g, "\\#");' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.preparePatch = function() {' ).
+ lo_buf->add( ' this.registerClickHandlerForFiles();' ).
+ lo_buf->add( ' this.registerClickHandlerForSections();' ).
+ lo_buf->add( ' this.registerClickHandlerForLines();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.buildSelectorInputStartsWithId = function(sId) {' ).
+ lo_buf->add( ' return "input[id^=''" + sId + "'']";' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.registerClickHandlerForFiles = function() {' ).
+ lo_buf->add( ' this.registerClickHandlerForSelectorParent(this.buildSelectorInputStartsWithId(PatchFile.prototype.ID), this.onClickFileCheckbox);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.registerClickHandlerForSections = function() {' ).
+ lo_buf->add( ' this.registerClickHandlerForSelectorParent(this.buildSelectorInputStartsWithId(PatchSection.prototype.ID), this.onClickSectionCheckbox);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.registerClickHandlerForLines = function() {' ).
+ lo_buf->add( ' this.registerClickHandlerForSelectorParent(this.buildSelectorInputStartsWithId(PatchLine.prototype.ID), this.onClickLineCheckbox);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.registerClickHandlerForSelectorParent = function(sSelector, fnCallback) {' ).
+ lo_buf->add( ' var elAll = document.querySelectorAll(sSelector);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' [].forEach.call(elAll, function(elem) {' ).
+ lo_buf->add( ' elem.parentElement.addEventListener("click", fnCallback.bind(this));' ).
+ lo_buf->add( ' }.bind(this));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.getAllLineCheckboxesForFile = function(oFile) {' ).
+ lo_buf->add( ' return this.getAllLineCheckboxesForId(oFile.id, PatchFile.prototype.ID);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.getAllSectionCheckboxesForFile = function(oFile) {' ).
+ lo_buf->add( ' return this.getAllSectionCheckboxesForId(oFile.id, PatchFile.prototype.ID);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.getAllLineCheckboxesForSection = function(oSection) {' ).
+ lo_buf->add( ' return this.getAllLineCheckboxesForId(oSection.id, PatchSection.prototype.ID);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.getAllLineCheckboxesForId = function(sId, sIdPrefix) {' ).
+ lo_buf->add( ' return this.getAllCheckboxesForId(sId, sIdPrefix, PatchLine.prototype.ID);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.getAllSectionCheckboxesForId = function(sId, sIdPrefix) {' ).
+ lo_buf->add( ' return this.getAllCheckboxesForId(sId, sIdPrefix, PatchSection.prototype.ID);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.getAllCheckboxesForId = function(sId, sIdPrefix, sNewIdPrefix) {' ).
+ lo_buf->add( ' var oRegex = new RegExp("^" + sIdPrefix);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' sId = sId.replace(oRegex, sNewIdPrefix);' ).
+ lo_buf->add( ' return document.querySelectorAll(this.buildSelectorInputStartsWithId(this.escape(sId)));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.getToggledCheckbox = function(oEvent) {' ).
+ lo_buf->add( ' var elCheckbox = null;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // We have either an input element or any element with input child' ).
+ lo_buf->add( ' // in the latter case we have to toggle the checkbox manually' ).
+ lo_buf->add( ' if (oEvent.srcElement.nodeName === "INPUT") {' ).
+ lo_buf->add( ' elCheckbox = oEvent.srcElement;' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' elCheckbox = this.toggleCheckbox(oEvent.srcElement.querySelector("INPUT"));' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' return elCheckbox;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.toggleCheckbox = function(elCheckbox) {' ).
+ lo_buf->add( ' elCheckbox.checked = !elCheckbox.checked;' ).
+ lo_buf->add( ' return elCheckbox;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.onClickFileCheckbox = function(oEvent) {' ).
+ lo_buf->add( ' var elCheckbox = this.getToggledCheckbox(oEvent);' ).
+ lo_buf->add( ' var oFile = new PatchFile(elCheckbox.id);' ).
+ lo_buf->add( ' var elAllLineCheckboxesOfFile = this.getAllLineCheckboxesForFile(oFile);' ).
+ lo_buf->add( ' var elAllSectionCheckboxesOfFile = this.getAllSectionCheckboxesForFile(oFile);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' [].forEach.call(elAllLineCheckboxesOfFile, function(elem) {' ).
+ lo_buf->add( ' elem.checked = elCheckbox.checked;' ).
+ lo_buf->add( ' }.bind(this));' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' [].forEach.call(elAllSectionCheckboxesOfFile, function(elem) {' ).
+ lo_buf->add( ' elem.checked = elCheckbox.checked;' ).
+ lo_buf->add( ' }.bind(this));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.onClickSectionCheckbox = function(oEvent) {' ).
+ lo_buf->add( ' var elSrcElement = this.getToggledCheckbox(oEvent);' ).
+ lo_buf->add( ' var oSection = new PatchSection(elSrcElement.id);' ).
+ lo_buf->add( ' this.clickAllLineCheckboxesInSection(oSection, elSrcElement.checked);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.onClickLineCheckbox = function(oEvent) {' ).
+ lo_buf->add( ' this.getToggledCheckbox(oEvent);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.clickAllLineCheckboxesInSection = function(oSection, bChecked) {' ).
+ lo_buf->add( ' var elAllLineCheckboxesOfSection = this.getAllLineCheckboxesForSection(oSection);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' [].forEach.call(elAllLineCheckboxesOfSection, function(elem) {' ).
+ lo_buf->add( ' elem.checked = bChecked;' ).
+ lo_buf->add( ' }.bind(this));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.registerStagePatch = function() {' ).
+ lo_buf->add( ' var elStage = document.querySelector("#" + this.ID.STAGE);' ).
+ lo_buf->add( ' var REFRESH_PREFIX = "refresh";' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' elStage.addEventListener("click", this.submitPatch.bind(this, this.ACTION.PATCH_STAGE));' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var aRefresh = document.querySelectorAll("[id*=" + REFRESH_PREFIX + "]");' ).
+ lo_buf->add( ' [].forEach.call(aRefresh, function(el) {' ).
+ lo_buf->add( ' el.addEventListener("click", memorizeScrollPosition(this.submitPatch.bind(this, el.id)).bind(this));' ).
+ lo_buf->add( ' }.bind(this));' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // for hotkeys' ).
+ lo_buf->add( ' window.stagePatch = function() {' ).
+ lo_buf->add( ' this.submitPatch(this.ACTION.PATCH_STAGE);' ).
+ lo_buf->add( ' }.bind(this);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' window.refreshLocal = memorizeScrollPosition(function() {' ).
+ lo_buf->add( ' this.submitPatch(this.ACTION.REFRESH_LOCAL);' ).
+ lo_buf->add( ' }.bind(this));' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' window.refreshAll = memorizeScrollPosition(function() {' ).
+ lo_buf->add( ' this.submitPatch(this.ACTION.REFRESH_ALL);' ).
+ lo_buf->add( ' }.bind(this));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.submitPatch = function(action) {' ).
+ lo_buf->add( ' // Collect add and remove info and submit to backend' ).
+ lo_buf->add( ' var aAddPatch = this.collectElementsForCheckboxId(PatchLine.prototype.ID, true);' ).
+ lo_buf->add( ' var aRemovePatch = this.collectElementsForCheckboxId(PatchLine.prototype.ID, false);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' submitSapeventForm({ add: aAddPatch, remove: aRemovePatch }, action, "post");' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'Patch.prototype.collectElementsForCheckboxId = function(sId, bChecked) {' ).
+ lo_buf->add( ' var sSelector = this.buildSelectorInputStartsWithId(sId);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' return [].slice.call(document.querySelectorAll(sSelector))' ).
+ lo_buf->add( ' .filter(function(elem) {' ).
+ lo_buf->add( ' return (elem.checked === bChecked);' ).
+ lo_buf->add( ' }).map(function(elem) {' ).
+ lo_buf->add( ' return elem.id;' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function preparePatch() {' ).
+ lo_buf->add( ' var oPatch = new Patch();' ).
+ lo_buf->add( ' oPatch.preparePatch();' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function registerStagePatch() {' ).
+ lo_buf->add( ' var oPatch = new Patch();' ).
+ lo_buf->add( ' oPatch.registerStagePatch();' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Command Palette (F1)' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// fuzzy match helper' ).
+ lo_buf->add( '// return non empty marked string in case it fits the filter' ).
+ lo_buf->add( '// abc + b = abc' ).
+ lo_buf->add( 'function fuzzyMatchAndMark(str, filter) {' ).
+ lo_buf->add( ' var markedStr = "";' ).
+ lo_buf->add( ' var filterLower = filter.toLowerCase();' ).
+ lo_buf->add( ' var strLower = str.toLowerCase();' ).
+ lo_buf->add( ' var cur = 0;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' for (var i = 0; i < filter.length; i++) {' ).
+ lo_buf->add( ' while (filterLower[i] !== strLower[cur] && cur < str.length) {' ).
+ lo_buf->add( ' markedStr += str[cur++];' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' if (cur === str.length) break;' ).
+ lo_buf->add( ' markedStr += "" + str[cur++] + "";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var matched = i === filter.length;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (matched && cur < str.length) markedStr += str.substring(cur);' ).
+ lo_buf->add( ' return matched ? markedStr: null;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function CommandPalette(commandEnumerator, opts) {' ).
+ lo_buf->add( ' if (typeof commandEnumerator !== "function") throw Error("commandEnumerator must be a function");' ).
+ lo_buf->add( ' if (typeof opts !== "object") throw Error("opts must be an object");' ).
+ lo_buf->add( ' if (typeof opts.toggleKey !== "string" || !opts.toggleKey) throw Error("toggleKey must be a string");' ).
+ lo_buf->add( ' this.commands = commandEnumerator();' ).
+ lo_buf->add( ' if (!this.commands) return;' ).
+ lo_buf->add( ' // this.commands = [{' ).
+ lo_buf->add( ' // action: "sap_event_action_code_with_params"' ).
+ lo_buf->add( ' // iconClass: "icon icon_x ..."' ).
+ lo_buf->add( ' // title: "my command X"' ).
+ lo_buf->add( ' // }, ...];' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (opts.toggleKey[0] === "^") {' ).
+ lo_buf->add( ' this.toggleKeyCtrl = true;' ).
+ lo_buf->add( ' this.toggleKey = opts.toggleKey.substring(1);' ).
+ lo_buf->add( ' if (!this.toggleKey) throw Error("Incorrect toggleKey");' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' this.toggleKeyCtrl = false;' ).
+ lo_buf->add( ' this.toggleKey = opts.toggleKey;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.hotkeyDescription = opts.hotkeyDescription;' ).
+ lo_buf->add( ' this.elements = {' ).
+ lo_buf->add( ' palette: null,' ).
+ lo_buf->add( ' ul : null,' ).
+ lo_buf->add( ' input : null' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( ' this.selectIndex = -1; // not selected' ).
+ lo_buf->add( ' this.filter = "";' ).
+ lo_buf->add( ' this.renderAndBindElements();' ).
+ lo_buf->add( ' this.hookEvents();' ).
+ lo_buf->add( ' Hotkeys.addHotkeyToHelpSheet(opts.toggleKey, opts.hotkeyDescription);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (!CommandPalette.instances) {' ).
+ lo_buf->add( ' CommandPalette.instances = [];' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' CommandPalette.instances.push(this);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.hookEvents = function() {' ).
+ lo_buf->add( ' document.addEventListener("keydown", this.handleToggleKey.bind(this));' ).
+ lo_buf->add( ' this.elements.input.addEventListener("keyup", this.handleInputKey.bind(this));' ).
+ lo_buf->add( ' this.elements.ul.addEventListener("click", this.handleUlClick.bind(this));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.renderCommandItem = function(cmd) {' ).
+ lo_buf->add( ' var li = document.createElement("li");' ).
+ lo_buf->add( ' if (cmd.iconClass) {' ).
+ lo_buf->add( ' var icon = document.createElement("i");' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' icon.className = cmd.iconClass;' ).
+ lo_buf->add( ' li.appendChild(icon);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' var titleSpan = document.createElement("span");' ).
+ lo_buf->add( ' li.appendChild(titleSpan);' ).
+ lo_buf->add( ' cmd.element = li;' ).
+ lo_buf->add( ' cmd.titleSpan = titleSpan;' ).
+ lo_buf->add( ' return li;' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.renderAndBindElements = function() {' ).
+ lo_buf->add( ' var div = document.createElement("div");' ).
+ lo_buf->add( ' var input = document.createElement("input");' ).
+ lo_buf->add( ' var ul = document.createElement("ul");' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' div.className = "cmd-palette";' ).
+ lo_buf->add( ' div.style.display = "none";' ).
+ lo_buf->add( ' input.placeholder = this.hotkeyDescription;' ).
+ lo_buf->add( ' for (var i = 0; i < this.commands.length; i++) ul.appendChild(this.renderCommandItem(this.commands[i]));' ).
+ lo_buf->add( ' div.appendChild(input);' ).
+ lo_buf->add( ' div.appendChild(ul);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.elements.palette = div;' ).
+ lo_buf->add( ' this.elements.input = input;' ).
+ lo_buf->add( ' this.elements.ul = ul;' ).
+ lo_buf->add( ' document.body.appendChild(div);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.handleToggleKey = function(event) {' ).
+ lo_buf->add( ' if (event.key !== this.toggleKey) return;' ).
+ lo_buf->add( ' if (this.toggleKeyCtrl && !event.ctrlKey) return;' ).
+ lo_buf->add( ' this.toggleDisplay();' ).
+ lo_buf->add( ' event.preventDefault();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.handleInputKey = function(event) {' ).
+ lo_buf->add( ' if (event.key === "ArrowUp" || event.key === "Up") {' ).
+ lo_buf->add( ' this.selectPrev();' ).
+ lo_buf->add( ' } else if (event.key === "ArrowDown" || event.key === "Down") {' ).
+ lo_buf->add( ' this.selectNext();' ).
+ lo_buf->add( ' } else if (event.key === "Enter") {' ).
+ lo_buf->add( ' this.exec(this.getSelected());' ).
+ lo_buf->add( ' } else if (event.key === "Backspace" && !this.filter) {' ).
+ lo_buf->add( ' this.toggleDisplay(false);' ).
+ lo_buf->add( ' } else if (this.filter !== this.elements.input.value) {' ).
+ lo_buf->add( ' this.filter = this.elements.input.value;' ).
+ lo_buf->add( ' this.applyFilter();' ).
+ lo_buf->add( ' this.selectFirst();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' event.preventDefault();' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.applyFilter = function() {' ).
+ lo_buf->add( ' for (var i = 0; i < this.commands.length; i++) {' ).
+ lo_buf->add( ' var cmd = this.commands[i];' ).
+ lo_buf->add( ' if (!this.filter) {' ).
+ lo_buf->add( ' cmd.element.style.display = "";' ).
+ lo_buf->add( ' cmd.titleSpan.innerText = cmd.title;' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' var matchedTitle = fuzzyMatchAndMark(cmd.title, this.filter);' ).
+ lo_buf->add( ' if (matchedTitle) {' ).
+ lo_buf->add( ' cmd.titleSpan.innerHTML = matchedTitle;' ).
+ lo_buf->add( ' cmd.element.style.display = "";' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' cmd.element.style.display = "none";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.applySelectIndex = function(newIndex) {' ).
+ lo_buf->add( ' if (newIndex !== this.selectIndex) {' ).
+ lo_buf->add( ' if (this.selectIndex >= 0) this.commands[this.selectIndex].element.classList.remove("selected");' ).
+ lo_buf->add( ' var newCmd = this.commands[newIndex];' ).
+ lo_buf->add( ' newCmd.element.classList.add("selected");' ).
+ lo_buf->add( ' this.selectIndex = newIndex;' ).
+ lo_buf->add( ' this.adjustScrollPosition(newCmd.element);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.selectFirst = function() {' ).
+ lo_buf->add( ' for (var i = 0; i < this.commands.length; i++) {' ).
+ lo_buf->add( ' if (this.commands[i].element.style.display === "none") continue; // skip hidden' ).
+ lo_buf->add( ' this.applySelectIndex(i);' ).
+ lo_buf->add( ' break;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.selectNext = function() {' ).
+ lo_buf->add( ' for (var i = this.selectIndex + 1; i < this.commands.length; i++) {' ).
+ lo_buf->add( ' if (this.commands[i].element.style.display === "none") continue; // skip hidden' ).
+ lo_buf->add( ' this.applySelectIndex(i);' ).
+ lo_buf->add( ' break;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.selectPrev = function() {' ).
+ lo_buf->add( ' for (var i = this.selectIndex - 1; i >= 0; i--) {' ).
+ lo_buf->add( ' if (this.commands[i].element.style.display === "none") continue; // skip hidden' ).
+ lo_buf->add( ' this.applySelectIndex(i);' ).
+ lo_buf->add( ' break;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.getSelected = function() {' ).
+ lo_buf->add( ' return this.commands[this.selectIndex];' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.adjustScrollPosition = function(itemElement) {' ).
+ lo_buf->add( ' var bItem = itemElement.getBoundingClientRect();' ).
+ lo_buf->add( ' var bContainer = this.elements.ul.getBoundingClientRect();' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' bItem.top = Math.round(bItem.top);' ).
+ lo_buf->add( ' bItem.bottom = Math.round(bItem.bottom);' ).
+ lo_buf->add( ' bItem.height = Math.round(bItem.height);' ).
+ lo_buf->add( ' bItem.mid = Math.round(bItem.top + bItem.height / 2);' ).
+ lo_buf->add( ' bContainer.top = Math.round(bContainer.top);' ).
+ lo_buf->add( ' bContainer.bottom = Math.round(bContainer.bottom);' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (bItem.mid > bContainer.bottom - 2) {' ).
+ lo_buf->add( ' this.elements.ul.scrollTop += bItem.bottom - bContainer.bottom;' ).
+ lo_buf->add( ' } else if (bItem.mid < bContainer.top + 2) {' ).
+ lo_buf->add( ' this.elements.ul.scrollTop += bItem.top - bContainer.top;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.toggleDisplay = function(forceState) {' ).
+ lo_buf->add( ' var isDisplayed = (this.elements.palette.style.display !== "none");' ).
+ lo_buf->add( ' var tobeDisplayed = (forceState !== undefined) ? forceState : !isDisplayed;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (tobeDisplayed) {' ).
+ lo_buf->add( ' // auto close other command palettes' ).
+ lo_buf->add( ' CommandPalette.instances.forEach(function(instance) {' ).
+ lo_buf->add( ' instance.elements.palette.style.display = "none";' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' this.elements.palette.style.display = tobeDisplayed ? "" : "none";' ).
+ lo_buf->add( ' if (tobeDisplayed) {' ).
+ lo_buf->add( ' this.elements.input.value = "";' ).
+ lo_buf->add( ' this.elements.input.focus();' ).
+ lo_buf->add( ' this.applyFilter();' ).
+ lo_buf->add( ' this.selectFirst();' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.getCommandByElement = function(element) {' ).
+ lo_buf->add( ' for (var i = 0; i < this.commands.length; i++) {' ).
+ lo_buf->add( ' if (this.commands[i].element === element) return this.commands[i];' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.handleUlClick = function(event) {' ).
+ lo_buf->add( ' var element = event.target || event.srcElement;' ).
+ lo_buf->add( ' if (!element) return;' ).
+ lo_buf->add( ' if (element.nodeName === "SPAN") element = element.parentNode;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (element.nodeName === "I") element = element.parentNode;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (element.nodeName !== "LI") return;' ).
+ lo_buf->add( ' this.exec(this.getCommandByElement(element));' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'CommandPalette.prototype.exec = function(cmd) {' ).
+ lo_buf->add( ' if (!cmd) return;' ).
+ lo_buf->add( ' this.toggleDisplay(false);' ).
+ lo_buf->add( ' if (typeof cmd.action === "function") {' ).
+ lo_buf->add( ' cmd.action();' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' submitSapeventForm(null, cmd.action);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Is any command palette visible?' ).
+ lo_buf->add( 'CommandPalette.isVisible = function() {' ).
+ lo_buf->add( ' return CommandPalette.instances.reduce(function(result, instance) { return result || instance.elements.palette.style.display !== "none" }, false);' ).
+ lo_buf->add( '};' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Command Enumerators' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function createRepoCatalogEnumerator(catalog, action) {' ).
+ lo_buf->add( ' // expecting [{ key, isOffline, displayName }]' ).
+ lo_buf->add( ' return function() {' ).
+ lo_buf->add( ' return catalog.map(function(i) {' ).
+ lo_buf->add( ' return {' ).
+ lo_buf->add( ' action : action + "?key=" + i.key,' ).
+ lo_buf->add( ' iconClass: i.isOffline ? "icon icon-plug darkgrey" : "icon icon-cloud-upload-alt blue",' ).
+ lo_buf->add( ' title : i.displayName' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function enumerateUiActions() {' ).
+ lo_buf->add( ' var items = [];' ).
+ lo_buf->add( ' function processUL(ulNode, prefix) {' ).
+ lo_buf->add( ' for (var i = 0; i < ulNode.children.length; i++) {' ).
+ lo_buf->add( ' var item = ulNode.children[i];' ).
+ lo_buf->add( ' if (item.nodeName !== "LI") continue; // unexpected node' ).
+ lo_buf->add( ' if (item.children.length >= 2 && item.children[1].nodeName === "UL") {' ).
+ lo_buf->add( ' // submenu detected' ).
+ lo_buf->add( ' var menutext = item.children[0].innerText;' ).
+ lo_buf->add( ' // special treatment for menus without text' ).
+ lo_buf->add( ' if (!menutext) {' ).
+ lo_buf->add( ' menutext = item.children[0].getAttribute("title");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' processUL(item.children[1], menutext);' ).
+ lo_buf->add( ' } else if (item.firstElementChild && item.firstElementChild.nodeName === "A") {' ).
+ lo_buf->add( ' var anchor = item.firstElementChild;' ).
+ lo_buf->add( ' if (anchor.href && anchor.href !== "#") items.push([anchor, prefix]);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // toolbars and actionbars' ).
+ lo_buf->add( ' [].slice.call(document.querySelectorAll(".nav-container > ul[id*=toolbar], .nav-container > ul[id*=actionbar]"))' ).
+ lo_buf->add( ' .filter(function(toolbar) {' ).
+ lo_buf->add( ' return (toolbar && toolbar.nodeName === "UL");' ).
+ lo_buf->add( ' }).forEach(function(toolbar) {' ).
+ lo_buf->add( ' processUL(toolbar);' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' items = items.map(function(item) {' ).
+ lo_buf->add( ' var action = "";' ).
+ lo_buf->add( ' var anchor = item[0];' ).
+ lo_buf->add( ' if (anchor.href.includes("#")) {' ).
+ lo_buf->add( ' action = function() {' ).
+ lo_buf->add( ' anchor.click();' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' action = anchor.href.replace("sapevent:", "");' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' var prefix = item[1];' ).
+ lo_buf->add( ' return {' ).
+ lo_buf->add( ' action: action,' ).
+ lo_buf->add( ' title : (prefix ? prefix + ": " : "") + anchor.innerText.trim()' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // forms' ).
+ lo_buf->add( ' [].slice.call(document.querySelectorAll("input[type=''submit'']"))' ).
+ lo_buf->add( ' .forEach(function(input) {' ).
+ lo_buf->add( ' items.push({' ).
+ lo_buf->add( ' action: function() {' ).
+ lo_buf->add( ' if (input.form.action.includes(input.formAction) || input.classList.contains("main")) {' ).
+ lo_buf->add( ' input.form.submit();' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' submitSapeventForm({}, input.formAction, "post", input.form);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' },' ).
+ lo_buf->add( ' title: (input.value === "Submit Query" ? input.title : input.value + " " + input.title.replace(/\[.*\]/, ""))' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // radio buttons' ).
+ lo_buf->add( ' [].slice.call(document.querySelectorAll("input[type=''radio'']"))' ).
+ lo_buf->add( ' .forEach(function(input) {' ).
+ lo_buf->add( ' items.push({' ).
+ lo_buf->add( ' action: function() {' ).
+ lo_buf->add( ' input.click();' ).
+ lo_buf->add( ' },' ).
+ lo_buf->add( ' title: document.querySelector("label[for=''" + input.id + "'']").textContent' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' // others:' ).
+ lo_buf->add( ' // - links inside forms' ).
+ lo_buf->add( ' // - label links' ).
+ lo_buf->add( ' // - command links' ).
+ lo_buf->add( ' // - other header links' ).
+ lo_buf->add( ' [].slice.call(document.querySelectorAll("form a, a.command:not(.unlisted), #header ul:not([id*=''toolbar'']) a"))' ).
+ lo_buf->add( ' .filter(function(anchor) {' ).
+ lo_buf->add( ' return !!anchor.title || !!anchor.text;' ).
+ lo_buf->add( ' }).forEach(function(anchor) {' ).
+ lo_buf->add( ' items.push({' ).
+ lo_buf->add( ' action: function() {' ).
+ lo_buf->add( ' anchor.click();' ).
+ lo_buf->add( ' },' ).
+ lo_buf->add( ' title: (function() {' ).
+ lo_buf->add( ' var result = anchor.title + anchor.text;' ).
+ lo_buf->add( ' if (anchor.href.includes("label")) {' ).
+ lo_buf->add( ' result = "Label: " + result;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' return result.trim();' ).
+ lo_buf->add( ' })()' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' return items;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function enumerateJumpAllFiles() {' ).
+ lo_buf->add( ' var root = document.getElementById("jump");' ).
+ lo_buf->add( ' if (!root || root.nodeName !== "UL") return null;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' return Array' ).
+ lo_buf->add( ' .prototype.slice.call(root.children)' ).
+ lo_buf->add( ' .filter(function(elem) { return elem.nodeName === "LI" })' ).
+ lo_buf->add( ' .map(function(listItem) {' ).
+ lo_buf->add( ' var title = listItem.children[0].childNodes[0].textContent;' ).
+ lo_buf->add( ' return {' ).
+ lo_buf->add( ' action: root.onclick.bind(null, title),' ).
+ lo_buf->add( ' title : title' ).
+ lo_buf->add( ' };' ).
+ lo_buf->add( ' });' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Save Scroll Position' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function saveScrollPosition() {' ).
+ lo_buf->add( ' // Not supported by Java GUI' ).
+ lo_buf->add( ' try { if (!window.sessionStorage) { return } }' ).
+ lo_buf->add( ' catch (err) { return err }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' window.sessionStorage.setItem("scrollTop", document.querySelector("html").scrollTop);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function restoreScrollPosition() {' ).
+ lo_buf->add( ' // Not supported by Java GUI' ).
+ lo_buf->add( ' try { if (!window.sessionStorage) { return } }' ).
+ lo_buf->add( ' catch (err) { return err }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var scrollTop = window.sessionStorage.getItem("scrollTop");' ).
+ lo_buf->add( ' if (scrollTop) {' ).
+ lo_buf->add( ' document.querySelector("html").scrollTop = scrollTop;' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' window.sessionStorage.setItem("scrollTop", 0);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( 'function memorizeScrollPosition(fn) {' ).
+ lo_buf->add( ' return function() {' ).
+ lo_buf->add( ' saveScrollPosition();' ).
+ lo_buf->add( ' return fn.call(this, fn.args);' ).
+ lo_buf->add( ' }.bind(this);' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Sticky Header' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/* https://www.w3schools.com/howto/howto_js_navbar_sticky.asp */' ).
+ lo_buf->add( '/* Note: We have to use JS since IE does not support CSS position:sticky */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// When the user scrolls the page, execute toggleSticky' ).
+ lo_buf->add( 'window.onscroll = function() { toggleSticky() };' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Add the sticky class to the navbar when you reach its scroll position.' ).
+ lo_buf->add( '// Remove "sticky" when you leave the scroll position' ).
+ lo_buf->add( 'function toggleSticky() {' ).
+ lo_buf->add( ' var body = document.getElementsByTagName("body")[0];' ).
+ lo_buf->add( ' var header = document.getElementById("header");' ).
+ lo_buf->add( ' var sticky = header.offsetTop;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' var stickyClass = "sticky";' ).
+ lo_buf->add( ' if (body.classList.contains("full_width")) {' ).
+ lo_buf->add( ' stickyClass = "sticky_full_width";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' if (window.pageYOffset >= sticky) {' ).
+ lo_buf->add( ' header.classList.add(stickyClass);' ).
+ lo_buf->add( ' } else {' ).
+ lo_buf->add( ' header.classList.remove(stickyClass);' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '/**********************************************************' ).
+ lo_buf->add( ' * Browser Control' ).
+ lo_buf->add( ' **********************************************************/' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Toggle display of warning message when using Edge (based on Chromium) browser control' ).
+ lo_buf->add( '// Todo: Remove once https://github.com/abapGit/abapGit/issues/4841 is fixed' ).
+ lo_buf->add( 'function toggleBrowserControlWarning(){' ).
+ lo_buf->add( ' if (!navigator.userAgent.includes("Edg")){' ).
+ lo_buf->add( ' var elBrowserControlWarning = document.getElementById("browser-control-warning");' ).
+ lo_buf->add( ' if (elBrowserControlWarning) {' ).
+ lo_buf->add( ' elBrowserControlWarning.style.display = "none";' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( ' }' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '// Output type of HTML control in the abapGit footer' ).
+ lo_buf->add( 'function displayBrowserControlFooter() {' ).
+ lo_buf->add( ' var out = document.getElementById("browser-control-footer");' ).
+ lo_buf->add( ' out.innerHTML = " - " + ( navigator.userAgent.includes("Edg") ? "Edge" : "IE" );' ).
+ lo_buf->add( '}' ).
+ li_asset_man->register_asset(
+ iv_url = 'js/common.js'
+ iv_type = 'text/javascript'
+ iv_mime_name = 'ZABAPGIT_JS_COMMON'
+ iv_inline = lo_buf->join_w_newline_and_flush( ) ).
+
+****************************************************
+* abapmerge Pragma [include] - ZABAPGIT_ICON_FONT_CSS.W3MI.DATA.CSS
+****************************************************
+ lo_buf->add( '@font-face {' ).
+ lo_buf->add( ' font-family: "ag-icons";' ).
+ lo_buf->add( ' font-weight: normal;' ).
+ lo_buf->add( ' font-style: normal;' ).
+ lo_buf->add( ' src: url("../font/ag-icons.woff") format("woff");' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.icon {' ).
+ lo_buf->add( ' line-height: 1;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.icon:before {' ).
+ lo_buf->add( ' font-family: ag-icons !important;' ).
+ lo_buf->add( ' font-style: normal;' ).
+ lo_buf->add( ' font-weight: normal !important;' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' display: inline-block;' ).
+ lo_buf->add( ' text-decoration: none;' ).
+ lo_buf->add( ' text-align: center;' ).
+ lo_buf->add( ' vertical-align: text-top;' ).
+ lo_buf->add( ' /* width: 1.1em; */' ).
+ lo_buf->add( ' /* padding-right: 0.2em */' ).
+ lo_buf->add( '' ).
+ lo_buf->add( ' /* For safety - reset parent styles, that can break glyph codes*/' ).
+ lo_buf->add( ' font-variant: normal;' ).
+ lo_buf->add( ' text-transform: none;' ).
+ lo_buf->add( '}' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.icon.large { font-size: 200%; }' ).
+ lo_buf->add( '' ).
+ lo_buf->add( '.icon-abapgit:before { content: "\f101"; }' ).
+ lo_buf->add( '.icon-abaplint:before { content: "\f102"; }' ).
+ lo_buf->add( '.icon-arrow-circle-up:before { content: "\f103"; }' ).
+ lo_buf->add( '.icon-bars:before { content: "\f104"; }' ).
+ lo_buf->add( '.icon-bolt:before { content: "\f105"; }' ).
+ lo_buf->add( '.icon-bookmark-solid:before { content: "\f106"; }' ).
+ lo_buf->add( '.icon-box:before { content: "\f107"; }' ).
+ lo_buf->add( '.icon-briefcase:before { content: "\f108"; }' ).
+ lo_buf->add( '.icon-bug-solid:before { content: "\f109"; }' ).
+ lo_buf->add( '.icon-check:before { content: "\f10a"; }' ).
+ lo_buf->add( '.icon-chevron-down:before { content: "\f10b"; }' ).
+ lo_buf->add( '.icon-chevron-left:before { content: "\f10c"; }' ).
+ lo_buf->add( '.icon-chevron-right:before { content: "\f10d"; }' ).
+ lo_buf->add( '.icon-chevron-up:before { content: "\f10e"; }' ).
+ lo_buf->add( '.icon-circle-dot-regular:before { content: "\f10f"; }' ).
+ lo_buf->add( '.icon-circle-play-regular:before { content: "\f110"; }' ).
+ lo_buf->add( '.icon-circle-solid:before { content: "\f111"; }' ).
+ lo_buf->add( '.icon-cloud-commit:before { content: "\f112"; }' ).
+ lo_buf->add( '.icon-cloud-solid:before { content: "\f113"; }' ).
+ lo_buf->add( '.icon-cloud-upload-alt:before { content: "\f114"; }' ).
+ lo_buf->add( '.icon-code-branch:before { content: "\f115"; }' ).
+ lo_buf->add( '.icon-code-commit:before { content: "\f116"; }' ).
+ lo_buf->add( '.icon-code-fork-solid:before { content: "\f117"; }' ).
+ lo_buf->add( '.icon-code-pull-request-solid:before { content: "\f118"; }' ).
+ lo_buf->add( '.icon-code-solid:before { content: "\f119"; }' ).
+ lo_buf->add( '.icon-cog:before { content: "\f11a"; }' ).
+ lo_buf->add( '.icon-copy-solid:before { content: "\f11b"; }' ).
+ lo_buf->add( '.icon-download-solid:before { content: "\f11c"; }' ).
+ lo_buf->add( '.icon-edit-solid:before { content: "\f11d"; }' ).
+ lo_buf->add( '.icon-exclamation-circle:before { content: "\f11e"; }' ).
+ lo_buf->add( '.icon-exclamation-triangle:before { content: "\f11f"; }' ).
+ lo_buf->add( '.icon-eye-solid:before { content: "\f120"; }' ).
+ lo_buf->add( '.icon-file-alt:before { content: "\f121"; }' ).
+ lo_buf->add( '.icon-file-code:before { content: "\f122"; }' ).
+ lo_buf->add( '.icon-file-image:before { content: "\f123"; }' ).
+ lo_buf->add( '.icon-file-zipper-regular:before { content: "\f124"; }' ).
+ lo_buf->add( '.icon-file:before { content: "\f125"; }' ).
+ lo_buf->add( '.icon-fire-alt:before { content: "\f126"; }' ).
+ lo_buf->add( '.icon-flow:before { content: "\f127"; }' ).
+ lo_buf->add( '.icon-folder:before { content: "\f128"; }' ).
+ lo_buf->add( '.icon-git-alt:before { content: "\f129"; }' ).
+ lo_buf->add( '.icon-github:before { content: "\f12a"; }' ).
+ lo_buf->add( '.icon-heart-regular:before { content: "\f12b"; }' ).
+ lo_buf->add( '.icon-info-circle-solid:before { content: "\f12c"; }' ).
+ lo_buf->add( '.icon-language-solid:before { content: "\f12d"; }' ).
+ lo_buf->add( '.icon-link-solid:before { content: "\f12e"; }' ).
+ lo_buf->add( '.icon-lock:before { content: "\f12f"; }' ).
+ lo_buf->add( '.icon-magnifying-glass-solid:before { content: "\f130"; }' ).
+ lo_buf->add( '.icon-markdown:before { content: "\f131"; }' ).
+ lo_buf->add( '.icon-paste-solid:before { content: "\f132"; }' ).
+ lo_buf->add( '.icon-plug:before { content: "\f133"; }' ).
+ lo_buf->add( '.icon-question-circle-solid:before { content: "\f134"; }' ).
+ lo_buf->add( '.icon-redo-alt-solid:before { content: "\f135"; }' ).
+ lo_buf->add( '.icon-server-solid:before { content: "\f136"; }' ).
+ lo_buf->add( '.icon-sliders-h:before { content: "\f137"; }' ).
+ lo_buf->add( '.icon-snowflake:before { content: "\f138"; }' ).
+ lo_buf->add( '.icon-star:before { content: "\f139"; }' ).
+ lo_buf->add( '.icon-tag-solid:before { content: "\f13a"; }' ).
+ lo_buf->add( '.icon-times-solid:before { content: "\f13b"; }' ).
+ lo_buf->add( '.icon-tools-solid:before { content: "\f13c"; }' ).
+ lo_buf->add( '.icon-truck-solid:before { content: "\f13d"; }' ).
+ lo_buf->add( '.icon-upload-solid:before { content: "\f13e"; }' ).
+ lo_buf->add( '.icon-user-cog-solid:before { content: "\f13f"; }' ).
+ lo_buf->add( '.icon-user-solid:before { content: "\f140"; }' ).
+ lo_buf->add( '.icon-vial-solid:before { content: "\f141"; }' ).
+ li_asset_man->register_asset(
+ iv_url = 'css/ag-icons.css'
+ iv_type = 'text/css'
+ iv_mime_name = 'ZABAPGIT_ICON_FONT_CSS'
+ iv_inline = lo_buf->join_w_newline_and_flush( ) ).
+
+****************************************************
+* abapmerge Pragma [include-base64] - ZABAPGIT_ICON_FONT.W3MI.DATA.WOFF
+****************************************************
+ lo_buf->add( 'd09GRgABAAAAACEsAAsAAAAAOygAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABH' ).
+ lo_buf->add( 'U1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPwAAAFZAtU4xY21hcAAA' ).
+ lo_buf->add( 'AYQAAAFYAAAE8PbieW1nbHlmAAAC3AAAGbEAACz898pmW2hlYWQAAByQAAAA' ).
+ lo_buf->add( 'MAAAADYu14YpaGhlYQAAHMAAAAAeAAAAJAmVB9NobXR4AAAc4AAAAGcAAAEI' ).
+ lo_buf->add( 'ggn/6GxvY2EAAB1IAAAAhgAAAIZvkWSUbWF4cAAAHdAAAAAfAAAAIAFnARxu' ).
+ lo_buf->add( 'YW1lAAAd8AAAASgAAAIWQeF35nBvc3QAAB8YAAACEgAAA67zKOCfeJxjYGRg' ).
+ lo_buf->add( 'YOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBm' ).
+ lo_buf->add( 'g4gCACY7BUgAeJxjYGT8wTiBgZWBgXEaYxoDA4M7lP7KIMnQwsDAxMDKzIAV' ).
+ lo_buf->add( 'BKS5pjA4fGT86MgE4uoxsTKAVDKCOADYRgluAHic7dNnbtwwAAXhWa+8buve' ).
+ lo_buf->add( '7XXvvfeqq+ZA+ZWL6AQORy/HiICPAxJqACVgGOgW50UFnT908PhdVjvtepfx' ).
+ lo_buf->add( 'dr3iV3tO5XpT//yUseNY5lU7DpVzq3LHHiOMMlaum6DPJFNMM8Msc8yzwCJL' ).
+ lo_buf->add( 'LLPCKmusM2CDTbbYZodd9tjngEOOOOaEU87K8y+45IprbrjljnseeOSJZ154' ).
+ lo_buf->add( '5Y13Pvjki2/q8go9/h99h+7g36x2l6Ldt6HAdsP9b6pwJ5vh8NtoeoEdCexo' ).
+ lo_buf->add( 'YMcCOx5+M81EYPvh2zWTgZ0K7HRgZwI7G9i5wM4HdiGwi4FdCuxyYFcCuxrY' ).
+ lo_buf->add( 'tcCuB3YQ2I3AbgZ2K7Dbgd0J7G5g9wK7H9iDwB4G9iiwx4E9CexpYM8Cex7+' ).
+ lo_buf->add( '581FYC8DexXY68DeBPY2sHeBvQ/sQ2AfA/sU2OfAvgT2NbBvgX0P7EdgPwP7' ).
+ lo_buf->add( 'FdjvwNZB/RfMwaYceJytWnmQHFd576+P97p7unuO7p6e+9ztnp2Vdlc7p7TS' ).
+ lo_buf->add( 'aq1dSStZNusjkbAdLMoGC8sFi8EEsA1rbIwTTEqxC8qBgqiKw7gqpFQVF7gq' ).
+ lo_buf->add( 'JAjbJKRyqZwDjKGy4Q+oFIktF05hJ2E233vdM7u6gBy7M6/f6/fe967v+H3f' ).
+ lo_buf->add( 'G8HYGAgC/ZQoCBVhQlgSrhPuFu4VPis8Jfyd8APhPMQFYbwTTMEe6PrUJ9Rr' ).
+ lo_buf->add( 'd1sloC61wCVpbx56ZQgsqPnt7l7w9kIJvNluZwpojdB6p069EhTBAtqbB+zn' ).
+ lo_buf->add( 'OqRe8wMlpNj+hRSnACnylr1OCVrzYkR1GjhVN4m0qGsj3W46JDuO47VwCKSE' ).
+ lo_buf->add( 'xQ7SnU1jyzLrWbfENM6sx9722n6NOGks2eFEomk6JA7uOO+8B1od/qjj3F2k' ).
+ lo_buf->add( 'g7XpFs4NtAyRoD3nH5AO2bZnwNyOGSjOlJqWpFhaJp+w0/UfSJLh52Z2Q28y' ).
+ lo_buf->add( '4yfEk6QoSyBLv6bnrFw6m7WyGqxnidje5R8UD9kpz4TdMzNiabocEsnmEmB7' ).
+ lo_buf->add( 'dWh0caTEuDM5lYLuNm/KluSbSUGSZMW9Sy0mnIyH9FSx8zm6U5Y1L9bv9meN' ).
+ lo_buf->add( 'nC7JoO7MLBTfelw8eqJ6sCTLn8psz+AHqjkinVQKsigpOTiupXU3fs2yJO6Q' ).
+ lo_buf->add( 'KrUxCYIpb1vynQ0ZZHJ/dwKg1CK4vHQKJ+/7uR0i2HEo7KeGWbZAelcWrBTs' ).
+ lo_buf->add( 'Xzk4D3HzVFMHIv+X7aeeIwZMlhvbDPXwr0joBxOs3WHTgpmlClJLJsQcklOU' ).
+ lo_buf->add( 'wX8qijwBM0hx7NrtBt03Mb2oyADiwav2HJBF7DQlvzVhwcmn7hJj1rtk6Qdp' ).
+ lo_buf->add( 'z8N1eoPP4NAS+Q6f1BPYRW7MSYrj3dsWpUPNQJqSxI9ta4ChCnkB/2AD/kyQ' ).
+ lo_buf->add( 'BCrEhLhgCx6+LQt1IRAmhWmhJfSEOWGvsCgcFK4W3iTcIBwVbhZuFU4I7xY+' ).
+ lo_buf->add( 'iH095Ebq9eyWWw+ib+8KeSUqe9GTfemWfHC5p0OYYCEXDzPBMAOTaddd9NLu' ).
+ lo_buf->add( 'G8Viq9lsVqtH0um5mZm6511VKk0Ui365PPjTmZlitVquVs163c3n1zwvXS7v' ).
+ lo_buf->add( 'HhvzC4WnX3zx9z/+8ZdXV1/4xjfuzVQ9r5p5Ar+YuzYswX1Vo6bWYtXByxkv' ).
+ lo_buf->add( 'k83sybC/OcxlMrP4jOF3PjOD6R6s343vF7LZ7EqS9c3EE4yS93ZW8jy2zSLf' ).
+ lo_buf->add( '69fhdcEQmoJgt+dhtgQOl/O9qBfSczDb3QNeenYvdNvT4NfiQJwypGfVxbsf' ).
+ lo_buf->add( 'vnuRJ6eWLT2hW8uoLGKUfpQ6+MWcC8Ji1GLxbv/I13TL0r92hNU49CGKHwez' ).
+ lo_buf->add( 'OLzE53AWnseTLuPpCnaVjdn269UaYQLu/ZJyAk5TTaOD4yy9Qh7u02iDlTA5' ).
+ lo_buf->add( 'fdksshzqXFjCLcGtgXqv609CDXUPwU2gJN2a7dldHxrvaUqWcUqzoAJW7Den' ).
+ lo_buf->add( 'sGDRM6jbjn8kZhva+VjiWSNlwIyR4cviyQNI0xGELFNWuJEept1OMlyApavk' ).
+ lo_buf->add( '058mqm4VnMG6U4Bzg2Xdku+6S7Z0eMYpFML9EQURUBriQhbpoXacBLc1Xsfp' ).
+ lo_buf->add( 'iS2Kx9TiWwKDlpJNfOKVwaufSGSVWfGV8wUHTiPNg0/EU2fPpuJP0Mp5JOmc' ).
+ lo_buf->add( 'F4b7LgqwjvLF5EoYdwiumGnXEcV6r95p830oov7FpMqLnRYsaBT39WzRhtN2' ).
+ lo_buf->add( '8eyplaKNzxW7KArFz6+tnWGbOnPKLhbtU6dn2GOmaK9gdQWH3MA/EXBPFoRD' ).
+ lo_buf->add( '0aiuQz00F7VpIJsD1gLKxGovsCkx+ZqDTsDErAytHgqbg3YBbYBUQxPVak8h' ).
+ lo_buf->add( 'RcfsWXs0O6d3Gy2qZBTaanT1nK3tsXqmY5v9aV73I/5uum/aG6V2ab3U/icz' ).
+ lo_buf->add( 'lagUd7O3vcprCqXKa5Uea7q7WEmk8vbcFK/ir6bmbLCxG36G54t7+A12vr2A' ).
+ lo_buf->add( 'TZZNr8eStEOB1P7wSUrHqauunlddzNDBizR96Es0TcdU9k4dw+zge+qIV/4Y' ).
+ lo_buf->add( 'PrpJax4YrTSjhXxY+9tnKbZ26Gc+g0ma0mep8+CzPAvsHfDKZzdpjcNLjJbN' ).
+ lo_buf->add( 'p1OCOHIe42fcZb9dv0xHSF46wEW0xinrzpRD4HfDxaYdKF6G2CtXphWt0fbY' ).
+ lo_buf->add( 'sixAZU18NidG79VLu8H9l12ktLHB5UJA3ZUVakgXeQB5wSnB7DyMb1Vl47Pp' ).
+ lo_buf->add( 'UEPDuf6td9/a58lgZv89j96znycgNPr9lX4fhJ1Rbf/WnQeiyv33fInVrfQv' ).
+ lo_buf->add( 'HtP/RWP2utGxIfe2rzTu103jVCx2ysheYeA/ouoxmsOvZZ2xRuca6mthc2Cc' ).
+ lo_buf->add( 'xFZlC69vKudIx4sPwD+jjLfDXgz7udgVBWoKOsxwMXyGwjSPJT/oYlKv0Snw' ).
+ lo_buf->add( 'QkDW9kGYPDzZ7Ab7gkczlenFqXL26fpcbdc20m8UM+5hlei6iUp2HVup8cPT' ).
+ lo_buf->add( '2O59ajNfnZ6u5pvq+2pz9akDWjLV6CfGtv0ba2nqQ9l5APVPAQujMbdMD3UQ' ).
+ lo_buf->add( 'n5CYi8Y5Gk0CVtnoUIxIbo7KRxI218xoz/4S6hTV3VDx1fyIp8kVxvyTq1Cv' ).
+ lo_buf->add( 'Ue2qmErvlC35TqpeaRbtVaYDVx1sh82Q3WWm92AN9XiPa77rGfcg5EVl6yGc' ).
+ lo_buf->add( 'Jfy/w6cUvnTZPHH72ZEgxu32Wt0e+5/f5Gc7hB0OsUccvja9b7qSAzcTHytY' ).
+ lo_buf->add( 'XiJbxnI5yx8FT3HsWBYm3brtQqY0OIdTtHCW4ePF8AGr0bllEJjin0xP0eFZ' ).
+ lo_buf->add( '0m9H2eyEpuoI6GSie7mm2ryT9bS0wVr4RPPAnxHGQKn5B1x3Rqii1DPVbjEz' ).
+ lo_buf->add( 'zhe3B5Ucro+dw3AJd5p2pdms2Dm7igjKNjXTTJqmKMSt+2P9A339fiuRsO7X' ).
+ lo_buf->add( 'MRu730z8BM0tfnB/2TjwTRxHFeYRGa7gWIx3GQ/3GHsP0cxWlufGh3tA3DXp' ).
+ lo_buf->add( 'he5F1MIbdpeGrskKghjHsm7KpW3ztGmnc7iruXS/MRPlZhp9njsXtnsnS1Ad' ).
+ lo_buf->add( 'PBE+M5mGFpi2bQZaI8N2kZUb/YObpYP9RlS3M+wyeCakhPuocLvJcEAgzAjL' ).
+ lo_buf->add( '6BPehBzEPKTWLEu3roKZUBcHjtTqPNDhCrwLVru5FaMlKsNFwyxRE8jz0dL8' ).
+ lo_buf->add( 'XEI1LWVFVVcU67lwdmpUFz5K0WqXwynDQDJoA2Xhyc31PZnzG9QgorKManxZ' ).
+ lo_buf->add( 'Ea8Lm+79m80mm9nBelhrhXQjzLLxc3FNlFD/lXAXBEBXVSIl6DJw5jFoStkq' ).
+ lo_buf->add( 'hmhV2QSs7EWv24bfMj15TTJyPF3UtJtuYmZ9VdNW9dzgeX2YtVkFbEiGOVgw' ).
+ lo_buf->add( 'PXSL4KzpvRer3/xmVrkaNtSijB2+j/D0K7AR8t940A1QXAMfEVscOJcHPmUq' ).
+ lo_buf->add( 'iNDA5xKPxp14+MpjPvFe4FLhpbETuvY9L80l3qdDMYcfNwlpot+a9CVVbuZr' ).
+ lo_buf->add( 'itzryUot35RVyU+iPF5cr3R5/aQU1v8Et3bf9PTz2Xo9K6pyZ0ISxaxn7JAp' ).
+ lo_buf->add( 'GAZQeYfhZUVRmujIqnhxG4WwNkThbUBmbVKM2L7pCMN/E5efRC9tG66cxRSq' ).
+ lo_buf->add( 'yGVJBtuSiCdtFC3iJkNk2UminCHGYTC204YFSx+cZ/7BctX78pdZBtChOKFb' ).
+ lo_buf->add( 'H9hHdXJ8ocFfrerW4LteFY6dwOan+CvVmthHjxN9C55F+fCE7UI30q5F3P1a' ).
+ lo_buf->add( 'yAGMKZAfxNBraEVexCRwSKOMFChTPIfYGa/h0a6xoz20nkMXGdZY+rYpu5Pa' ).
+ lo_buf->add( 'DnrE4+tMnH96mLVa01gPWzt8jZ+rsKaYbLft7f2IfcP5XYV7ZApFYRfzUxEf' ).
+ lo_buf->add( 'iMTfK3ZncS9GnMrmKbnVJPMVutxJGG4bmy+2gsdvkqSXbtFN0F+S1C/uMCqx' ).
+ lo_buf->add( 'MUm6CY94LHZ2cPZHitQgRB38kEF9OO4U4gr63l9h9S/pYOq3vCQ5O2LYRcU+' ).
+ lo_buf->add( '2KUyePntsCBNKHF0QU6zTp9TCWlII9/sdXgD5c0VxjEfgpsQ6NAhPAi8ULd2' ).
+ lo_buf->add( 'eiF23wpAXrfzeT+f36tSZUahmC4odCtYuYfV+vkvPiJTKj9CKOVnufFz3KtF' ).
+ lo_buf->add( 'lHMLTzNAfkpbgDuBsMqeRyGRrjSyuEsludSgksoR9bxWrWrNywy/nGC+NLqN' ).
+ lo_buf->add( 'iVgsMfjqZSYQjY+YKYejzzPUFBpoFFP8n+V2uItyzeT5AtTHYl4o2q6D4jzP' ).
+ lo_buf->add( 'PLWghp2gcufRSi5tEGKkc5Wjf88KpqKYrPAfwb5r9wU8OeXndF2hkr7/moau' ).
+ lo_buf->add( '7SjLiijB+nUlv1I2jHLFL123Nb8eRN2CfXfkfElU5JjuN9yloBwAVbhMKCP/' ).
+ lo_buf->add( 'k/nWOxD/7cHyCO8w2ZxN03ooEaF1bPu95FbZZWgocFt2Mgy8JaFClS8zHwkT' ).
+ lo_buf->add( 'Y5ihd4Tea8H5K8e60Vo7IqPwnga1wOpZck34YMnXB09zxkROw6a7jwzOQMXS' ).
+ lo_buf->add( 'TwyO41QJny/DSC7ue1NoCYvCm9Eb2sHU6NbwA5MRrj+26pR24NVtlBtu6anP' ).
+ lo_buf->add( 'fXdszPwUP3B3MDU77Duk9alqFV3RlETFXZK0S6RSUnrxRgtXwWZYcQprR46s' ).
+ lo_buf->add( 'DNZP4/w+JBPooYLNRE/WEVtTaaeEH9bx88WiqIq2JHXx0RMlpDq4kbn1xzm1' ).
+ lo_buf->add( 'Iw5f62ncGR/7fx3p0Oh54NKew7Nje5FEb6nIdwN9/4vXTOsdKVpycrzV4XqE' ).
+ lo_buf->add( 'J70ReL9764raR86x5WwI656sS8cCWZeDGaxsFArwuQummzgyuJ1Pd7A+s5aR' ).
+ lo_buf->add( 'pGMNSWqcYQ0bhdFZMd7KomfRF/YLR4Xb8KyGjBMJZjQ1ZKkL540nUKdhm1B0' ).
+ lo_buf->add( '3a0FPJsI+zJvk73xWkxDT/KY9gIPL2i0QrUZ21zR6IbANTSm9k127n285qKE' ).
+ lo_buf->add( 'ZEQfXYmMmIpZsaQ9qkMysEY1Vlwx7cE61eCcnxtwZQ9+Dumthrj4YPh40zFV' ).
+ lo_buf->add( 'zY+P51X1WMw0b9vEudJF5/VLzuqyp3LlExjG6piNTXFvl1A/CD2ZyG3zJcID' ).
+ lo_buf->add( '7KiavB5qKQJLpXxz56Fbd9/xwTt2V/Olbm2yf3Uq3rhtFyFOCv66UNnVWTrd' ).
+ lo_buf->add( 'nb9zHj/5G5tTg7/M7O/ny9mZ+xdjWuMY91l4fOM8ao+9HHMKdhh5CYPvhGsR' ).
+ lo_buf->add( 'XGYUvfHbvWGwguHOULGQoarhwRsvRDI1f3wIat5gVjP3eKOPhtc2H88xY7qi' ).
+ lo_buf->add( 'aW/B70pYhUY2Z/cbvOrB8e44fgZn8+wxDj9mzbP9RoVZYkyyrAv208+wZIXX' ).
+ lo_buf->add( '8gpMGn1Wuxr2fCkkFPmKuLOCzWLPUL/w2Nj6JFQqHh4anDvb08zHh+qLndSj' ).
+ lo_buf->add( '+OLPYa2nDRUgJoPzUOlpYRh7g50Z+qHbOD+gWHpdNJwsIWgtAkTjBO0Fh+K9' ).
+ lo_buf->add( 'gG4qN3jmeTWjNVpmJqbMJvJKtpqk0ynRLegmTcY1ZfZjqvq85mnPqeA8r6oT' ).
+ lo_buf->add( 'bSWWMWdJqpJVCsmpD2p1VzfH6L0kb7QexmbY5DnNE1Q+qVfRnhNEIY6wKtwj' ).
+ lo_buf->add( 'fFB4SPgdlFuHtPFQA8LsFkJpdJC7vl3jPiji0D0Ik5i1wzPmSbcVmkLEqt0e' ).
+ lo_buf->add( 't4PMofA7fq/rodLFc2YW0kuj0cQ2rsPNJ7+v6TFuRcMokTSqZZYgbmdkpsSA' ).
+ lo_buf->add( 'oNVEuzoFX4opklRG9SiDPqkAGjfYs3914S1HVM0wjaRhKbKMplpRIIZGXSdW' ).
+ lo_buf->add( 'LpGUzLFUwUrEDFnUtJSZMEtXlc2EkdJVANlScNsKqfGkpl79G7Xqe78rEpmY' ).
+ lo_buf->add( 'QEVSBhEBMw5lioh8QcLPe2RQWVYUFUlEvCUS+PDC6tINDyIeJnsALQZV4yrq' ).
+ lo_buf->add( 'DFmWmQ6nMQTNatpAb9jNbrezcc1KpyWqaPwPDXo6belx3bK35xydyFblRoLw' ).
+ lo_buf->add( '+sEblnb2FgZPspkQUVakcZBFficFJihsFBmVScSfAN9Dj6fLoma4gaOLsTAa' ).
+ lo_buf->add( 'x8Sr1017tdYODzePexgOngJ3I5hmIPS1mJHdV28tZb2njYrxtJddatUWMwCx' ).
+ lo_buf->add( '7YltXm17Mn7mTDy5veZtS8AfGEYmTbSVNinvdJ+KxZ5yd5ZJe0Uj6czKdMKU' ).
+ lo_buf->add( 'SKdO3MD6wheswCX1DpHMxKb+G2LF9kXxqZF3720FH6G7HcIQ5semL7g0WExm' ).
+ lo_buf->add( 's7Vs9hBVjjHsYBgsRfyGz60I852sUS07YLUZhS7wlCq3UyW0oeIDcJbfIjFE' ).
+ lo_buf->add( 'cSu6KO0uCnbaHcIcSFaTylRodErserPFsds0ePXxaFpszsi/+N6CaZE15Peg' ).
+ lo_buf->add( '3V4Uj+72hgHqdtfPidwaDTCFBRAGd4u6oYsLMoknJO2wJiXiRL7e9qGlGrtV' ).
+ lo_buf->add( 'w1BF0cy5qqwlqG0mUjJNEEJlXTWIkSBxO3aStWkbofsxNHQbAggzBP9O0QQl' ).
+ lo_buf->add( 'quOoBDNHJ1cNVTYShjxeNOWEJcsxzVCBjywqikESBok7WdZANUb3P+J7Ub9P' ).
+ lo_buf->add( 'CDcgykbJ566qBcwZRY4KdXnAAr7dKeCIymPe9rgFocM6D6w98aPYt8fCzOEu' ).
+ lo_buf->add( 'dhkpQsWlgm0X/Hdsg5gcz8XEzJyT8d7tLWZcOQmq4uYplFW/cPjqwuBE2HJS' ).
+ lo_buf->add( '3GyZWb1My/xrhasPF8a1Mqg5V1EhKbuZRaTpuXMZUc/H5Zg4+Q6fEXvkV204' ).
+ lo_buf->add( 'ugs7y/FMldmBTjuKF9Yv9hjDoAmcykwcuP7ARGboZxXuO9Xc3YTK8sSBCfws' ).
+ lo_buf->add( 'F5yzrAqT5VKzWRrGwriP6vAxtlx7bHpVocCEwgOnGx9mJuxDvaVhgPjcJuyH' ).
+ lo_buf->add( 'maXeh5i9+3Ajih3/xaYzsekTPwDfQv4voGcuQPUCQOLjKmng1jstr9dyvaCF' ).
+ lo_buf->add( 'cK0lXv/z76PXZItjmA5ent8zP4/fPY/cggl8K28PXmC1MGXnBy+8/8iR979w' ).
+ lo_buf->add( 'zTUvSHe94x0Cj8FxjMJ88IowK8yxO0UuFrhrTMRoFASYg1HE0mtF/kgIG9Hc' ).
+ lo_buf->add( '9NiEmN+xVvUesfTr1FKtpLJQkX6iEvrdz56wdB4weMS6G91/uo/Csldd1q14' ).
+ lo_buf->add( 'Mhm39MEZ3YL3h37369/mkYIZHk/wyXFsO9RVDLtS3JVJzPMjLYJXHfpCPALb' ).
+ lo_buf->add( '6jAN2grPPeiEAQUQEI3MDPjlYuJQb6F3KIHZn+FLWF1lOGM1waFlZdex2G23' ).
+ lo_buf->add( 'xY7tqvBiIqy7QE/uRtR8oU8d1KKoUBj6YSoRbSfKFN3qo4X+J2PQkQ++VSO+' ).
+ lo_buf->add( '2ijmXUmU65IuJTQrlSxqJClm9RRV+ugEK1YuZte69dA13qpxb0vGK7Im5dAI' ).
+ lo_buf->add( '2VS3rZiq6GDF7JzMNCqoRFYThlspTOdfD73mLXcSb7C7W9TjXq8bYkOO1ffi' ).
+ lo_buf->add( 'sddDXsZtjC6z+E9B+IpB2HGsNkbxpPSHdYs2vbnK9muntl8zVd7p4eQb6Gf9' ).
+ lo_buf->add( '+vRieKkxVh2jvJnl0Kab2X7tzddsd1000w0pJpVq0XWHoEWYdR15nkWcdwi7' ).
+ lo_buf->add( '0Iu8QbhFeBvnf25wmAFgcwyG21cfZrz/hxawPlhghw1nMd0Tsuzh8PH2/0UN' ).
+ lo_buf->add( 'HLdNXofJsZCrI97+H74f3l/h3tSFg8JJ1PjVC+93I84P2SzSd8HmlWx1qAlH' ).
+ lo_buf->add( 'bVqXtLmUTtQGzg/OcElY4c4Wz8KW/IDfGsPKZptzPHvuwuxaggteKFOb2dP/' ).
+ lo_buf->add( 'o9ccmw82NuBZ1AFfYZFaHmBgtixgYVdmvqZh9K7HSj6Ji53eMHYwWu8ocueG' ).
+ lo_buf->add( 'bVmQIRgGH3jIgdlJj176LpLzvaI7Av6X/uSiE7bleCScFzyDHEcRHMbIyvLy' ).
+ lo_buf->add( 'ColhlqKRJpKkSqbS0FFZxPGtu7xLUWKKKWdx1UTLYs6Q5V0H04AogBJRC4iJ' ).
+ lo_buf->add( 'PSTyi8lpYkgufXAX4omt5JSYLM8tc3JIAMkhrJCkz3qaGKM4AKSbTZd1pjFR' ).
+ lo_buf->add( '82SDWEjSq0cDXNe8cbdssRnlpti5TGX5ZJW5G5vXhdOhNQ8nZ+EkhxRFt9lM' ).
+ lo_buf->add( 'w/+dohH9NmPj5+I2UeK+Ojs3djaEH1aabTeevj8tIoYB6arHzDhod2ZFdMce' ).
+ lo_buf->add( 'fBA9LTF7pwZx87GriOfByw+5opPR7njMcAlZWiLENR67Q8s4kH7IUNXN39l8' ).
+ lo_buf->add( 'FeUuKeQQgbrOlkAUj26MbvTOpDr2w6nUGTv/Saewyj1fG858Mm+fsfF9Bx+F' ).
+ lo_buf->add( 'NnuXs0e69zicYbbdHvHmiCVHfBWxU/DT2zUtree022/XcnpaY88LyiBcoWJY' ).
+ lo_buf->add( 'ju4xRUVUEOXPcN2K0oOGKOgE1Gt5nKfDwTgw5kHQONvOLndEGPN3aRBd02y5' ).
+ lo_buf->add( '2vj3e5LT7sm1hePzJ2Nq8p5YWe/Ent5WtrN23tFEU7l6KXZYkej4obzrwvXG' ).
+ lo_buf->add( 'zTufsMc79n3GZ0Ml+d57kmrs5PzxhbWT7jR2j3Vipa+W7Vgqf3iMSsrh2NLV' ).
+ lo_buf->add( 'siVqTt7tFq+Xrt/5e3Zn3L638vDocoljF3ENj4rdr+1kUd/xeic8oE57FIdn' ).
+ lo_buf->add( 'gS0W1grTULMpw0VUh5keg1TiasK63XK2FZwBB4KJ/kp/Db8zyJ2DiSjmti18' ).
+ lo_buf->add( '7j617fbTdznYfoYHFrBDo99vsC9XWKth3C38nFu9ffO+Qxjdd7hhqCX61Uz4' ).
+ lo_buf->add( '2wwUZGU4V26t6pH12rznu/TCY/CdNb/tc4eDB8LgtyND9PhPL73veIo127zy' ).
+ lo_buf->add( 'ODHc0DB29BHEgnP8F6wfwP3sBmHUPLwMC3wGathVGMM8/CKMB9jDazAWEggv' ).
+ lo_buf->add( 'wXisnTKXqySS8a3w2KsFdcoj7vznKB3uqAR1XHS9FjrBaKR7fke8TZJzCugZ' ).
+ lo_buf->add( 'Wcmi21etEieZU2RPByUry1ki6p6s5IY1WUXOYM2jTgGKDfwOvl+fq9XmDrDk' ).
+ lo_buf->add( 'X0VJpLqeNAqGrKN0G7osxZL1I/Xk2PwYcwPihvhx141LpJKVJcuiJQKUoktE' ).
+ lo_buf->add( 'rbgoZytEil++1pJ4rYFDFqHQKP5uNCAmP5RkYpYDM0sVVaY5U4NEAkdrOgWN' ).
+ lo_buf->add( 'KOz3VNxvAcSTNXbnvXV/LtoKxq1TsL65nPu3Tt0pjM2DsDluZThMwWliZuQv' ).
+ lo_buf->add( 'Auc5FisLr9ZgCE17TM+g4Cs9j8JRxhz64F8K/QYJCuBprDz4x8dbx+FnjH80' ).
+ lo_buf->add( 'rGoojT5W6ax8FGuQ+n8DjoRJEQAAAHicY2BkYGAA4r+lycXx/DZfGbiZGEDg' ).
+ lo_buf->add( 'idCiqTD6/9//f9mnMbECuRwMYGkAXp8M93icY2BkYGBiAAH2qf///v/NPo2B' ).
+ lo_buf->add( 'kQEVOAEAdO8FdgAAeJxlj9ERgDAIQ6E/rtVRHIUl3IchHMQFbKS0PVA/3nE0' ).
+ lo_buf->add( 'QFIiou1AK1Y7rEZFYxn9AAhtout9aEUCFoDONCNx22frqrg77DsfNPsCfKU8' ).
+ lo_buf->add( 'y0ej92y/zLan9reZl/d3niKuu8cDcFI4PQAAAAAAAX4CNAJ2AroC5AMGAzID' ).
+ lo_buf->add( 'bgPUA/oEIARGBGwEkgTMBQwFJgVyBaAF6gZmBpoHCgeMB9wIWAiaCOoJRAmA' ).
+ lo_buf->add( 'CcAKJAp8CwILUgvaDAoMRAy2DOQNLA4GDloOpA80D7oP7BAkEFwQsBDuEVYR' ).
+ lo_buf->add( 'nhIsErITshPoFBQUThS6FRIVYhYWFkwWfgAAeJxjYGRgYHBiFGCQZgABJiDm' ).
+ lo_buf->add( 'AkIGhv9gPgMAE1cBhQB4nGWNS27CMBRFb/j0A1KLVKkd1qMOqAifIQuAOQNm' ).
+ lo_buf->add( 'HYTghKAkjhyDxKwr6BK6hK6i6gq6oF7cxwRsye+8865tAD38IMBxBbjx53E1' ).
+ lo_buf->add( 'cM3un5uke+EW+Um4jS6eha/o+8IdvGIi3MUD3vhC0Lql6aESbuAO78JN+g/h' ).
+ lo_buf->add( 'FvlTuI1HfAlf0X8Ld7DEr3AXL0E/SgdZbMp6odNdHtlTe6pLbevMlGocjk5q' ).
+ lo_buf->add( 'rkttI6fXanVQ9T6dOJeoxJpCzUzpdJ4bVVmz1bELN85V0+EwER/GpkCEFANk' ).
+ lo_buf->add( 'iGFQosYCmmaHnBN7MT3vl0xb1sz3CmOEGF2k5kyVPhnBsa6ZXOHAs8ae2Qmt' ).
+ lo_buf->add( 'Q8I+YcagIM383WM65zY0lZ9taWL6EBt/q8IUQ+7kLB/634s/3IhcMHicbVJn' ).
+ lo_buf->add( 'e9owGOQSEzAzgYzuvVt375U2/SWyLRs9CMvVgNBfX1kSNB/qD9bdya/vvVdq' ).
+ lo_buf->add( '7bT80279/znDDnYRoY09dNBFjB76GGCIEcbYxwEmmOIQRzjGCS7hMq7gKq7h' ).
+ lo_buf->add( 'Om7gJm7hNu7gLu7hPh7gIR7hMZ7gKZ4hwXO8wEu8wmu8wVu8w3t8wEd8wmd8' ).
+ lo_buf->add( 'wVd8w3ec4gd+4gy/Wh2SkrpkutusnFV6TKQUqyRjMuM0MXWUEqmiVHA9SoWY' ).
+ lo_buf->add( 'L4icJ0pwlu+m4jxOJaNFRhSNU1N6vZ3NaDYf2PdSiirJxaraEk4LPdwQycqZ' ).
+ lo_buf->add( '7m2YqSfBMxc6kbQ0nMhpkGpO1httEDRnNsi4MHmSicWC6b4nbmPfY1NzQfKE' ).
+ lo_buf->add( 'cLspcpqkklTZzGNfNHa4EJtYJ47XhnNr+NtQpb3ec7pPnonS0nrt6aiJ6Gz8' ).
+ lo_buf->add( 'hzRnoWZCzzNOFkQzG9C3fXhR0pKRquQ0puvw627BbDTbbuxA49lziC1ISacO' ).
+ lo_buf->add( '/mF1TeVmHFGj2TLpyqKCi9VeIXhOZccea6Pt2XVm0uGMErmd7AGrCpFcHOWI' ).
+ lo_buf->add( '216MdQkx7GUII4m4yObHtoGKFWtWlUnJiVKh4eZCNAPo10TpUBvV3JRHbnj/' ).
+ lo_buf->add( 'kgcXSXPRdBXOT1G5tGEciZV9UamSWawqsSo4mdNIaSJjTcLl6mu2oGqDheBb' ).
+ lo_buf->add( 'LE0W2h2EQ/d+xjrYOYb6nqMeLhnhHrZafwFnhCXLAAA=' ).
+ li_asset_man->register_asset(
+ iv_url = 'font/ag-icons.woff'
+ iv_type = 'font/woff'
+ iv_mime_name = 'ZABAPGIT_ICON_FONT'
+ iv_base64 = lo_buf->join_and_flush( ) ).
+
+ ri_asset_man = li_asset_man.
+
+ ENDMETHOD.
+ METHOD get_frontend_services.
+
+ IF gi_fe_services IS INITIAL.
+ IF iv_disable_gui IS INITIAL.
+ CREATE OBJECT gi_fe_services TYPE zcl_abapgit_frontend_services.
+ ELSE.
+ CREATE OBJECT gi_fe_services TYPE zcl_abapgit_frontend_no_gui.
+ ENDIF.
+ ENDIF.
+
+ ri_fe_serv = gi_fe_services.
+
+ ENDMETHOD.
+ METHOD get_gui.
+
+ DATA:
+ li_hotkey_ctl TYPE REF TO zif_abapgit_gui_hotkey_ctl,
+ li_router TYPE REF TO zif_abapgit_gui_event_handler,
+ li_asset_man TYPE REF TO zif_abapgit_gui_asset_manager.
+
+ DATA lo_html_preprocessor TYPE REF TO zcl_abapgit_gui_html_processor.
+
+ IF go_gui IS INITIAL.
+ li_asset_man = get_asset_manager( ).
+
+ CREATE OBJECT lo_html_preprocessor EXPORTING ii_asset_man = li_asset_man.
+ lo_html_preprocessor->preserve_css( 'css/ag-icons.css' ).
+ lo_html_preprocessor->preserve_css( 'css/common.css' ).
+
+ CREATE OBJECT li_router TYPE zcl_abapgit_gui_router.
+ CREATE OBJECT li_hotkey_ctl TYPE zcl_abapgit_gui_hotkey_ctl.
+
+ CREATE OBJECT go_gui
+ EXPORTING
+ io_component = li_router
+ ii_hotkey_ctl = li_hotkey_ctl
+ ii_html_processor = lo_html_preprocessor
+ ii_asset_man = li_asset_man.
+ ENDIF.
+ ro_gui = go_gui.
+
+ ENDMETHOD.
+ METHOD get_gui_services.
+ IF gi_gui_services IS NOT BOUND.
+ gi_gui_services ?= get_gui( ).
+ ENDIF.
+ ri_gui_services = gi_gui_services.
+ ENDMETHOD.
+ METHOD get_popups.
+
+ IF gi_popups IS INITIAL.
+ CREATE OBJECT gi_popups TYPE zcl_abapgit_popups.
+ ENDIF.
+
+ ri_popups = gi_popups.
+
+ ENDMETHOD.
+ENDCLASS.
+
+CLASS kHGwlrVRrOJtQtrmwQhffrvwSNBuVh DEFINITION DEFERRED.
+* renamed: zcl_abapgit_popups :: lcl_object_decision_list
+CLASS kHGwlrVRrOJtQtrmwQhffrvwSNBuVh DEFINITION FINAL.
+ PUBLIC SECTION.
+
+ CONSTANTS c_default_column TYPE abap_componentdescr-name VALUE 'DEFAULT_COLUMN'.
+ CONSTANTS c_fieldname_selected TYPE abap_componentdescr-name VALUE 'SELECTED'.
+ CONSTANTS c_answer_cancel TYPE c LENGTH 1 VALUE 'A'.
+ CONSTANTS c_fieldname_obj_type TYPE abap_componentdescr-name VALUE 'OBJ_TYPE'.
+ CONSTANTS c_own_pfstatus TYPE sy-pfkey VALUE 'DECIDE_DIALOG'.
+
+ METHODS constructor
+ IMPORTING
+ !it_list TYPE STANDARD TABLE
+ !iv_title TYPE lvc_title DEFAULT space
+ !iv_header_text TYPE csequence DEFAULT space
+ !is_position TYPE zif_abapgit_popups=>ty_popup_position
+ !iv_striped_pattern TYPE abap_bool DEFAULT abap_false
+ !iv_optimize_col_width TYPE abap_bool DEFAULT abap_true
+ !iv_selection_mode TYPE salv_de_constant DEFAULT if_salv_c_selection_mode=>multiple
+ !iv_select_column_text TYPE csequence DEFAULT space
+ !it_columns_to_display TYPE zif_abapgit_popups=>ty_alv_column_tt
+ !it_preselected_rows TYPE zif_abapgit_popups=>ty_rows OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+
+ METHODS display
+ RAISING
+ zcx_abapgit_exception.
+ METHODS get_selected
+ EXPORTING
+ VALUE(et_list) TYPE STANDARD TABLE.
+
+ PRIVATE SECTION.
+
+ DATA mr_table TYPE REF TO data.
+ DATA mo_table_descr TYPE REF TO cl_abap_tabledescr.
+ DATA mo_alv TYPE REF TO cl_salv_table.
+ DATA mv_cancel TYPE abap_bool.
+ DATA ms_position TYPE zif_abapgit_popups=>ty_popup_position.
+
+ " Events
+ METHODS on_select_list_link_click
+ FOR EVENT link_click OF cl_salv_events_table
+ IMPORTING
+ !row
+ !column.
+ METHODS on_select_list_function_click
+ FOR EVENT added_function OF cl_salv_events_table
+ IMPORTING
+ !e_salv_function.
+ METHODS on_double_click
+ FOR EVENT double_click OF cl_salv_events_table
+ IMPORTING
+ !row
+ !column.
+
+ " Methods
+ METHODS create_new_selectable_table
+ IMPORTING
+ it_list TYPE STANDARD TABLE.
+ METHODS preselect
+ IMPORTING
+ it_preselected_rows TYPE zif_abapgit_popups=>ty_rows OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
+ METHODS create_alv
+ RETURNING
+ VALUE(ro_alv) TYPE REF TO cl_salv_table
+ RAISING
+ cx_salv_msg.
+ METHODS setup_columns
+ IMPORTING
+ io_columns TYPE REF TO cl_salv_columns_table
+ iv_selection_mode TYPE salv_de_constant
+ iv_select_column_text TYPE csequence
+ it_columns_to_display TYPE zif_abapgit_popups=>ty_alv_column_tt
+ RAISING
+ cx_salv_msg.
+ METHODS setup_toolbar
+ IMPORTING
+ !iv_selection_mode TYPE salv_de_constant
+ !iv_object_list TYPE abap_bool.
+ METHODS ask_user_for_obj_category
+ RETURNING
+ VALUE(rv_category) TYPE string.
+ METHODS mark_category
+ IMPORTING
+ iv_category TYPE string.
+ METHODS mark_all
+ IMPORTING
+ iv_selected TYPE abap_bool.
+ METHODS mark_visible
+ IMPORTING
+ iv_selected TYPE abap_bool.
+ METHODS mark_selected.
+ METHODS mark_indexed
+ IMPORTING
+ iv_selected TYPE abap_bool DEFAULT abap_true
+ iv_invert TYPE abap_bool DEFAULT abap_false
+ it_scope TYPE lvc_t_fidx.
+ METHODS are_all_marked
+ IMPORTING
+ it_scope TYPE lvc_t_fidx
+ RETURNING
+ VALUE(rv_yes) TYPE abap_bool.
+ METHODS refresh.
+
+ENDCLASS.
+
+CLASS kHGwlrVRrOJtQtrmwQhffrvwSNBuVh IMPLEMENTATION.
+
+ METHOD display.
+
+ mo_alv->display( ).
+
+ IF mv_cancel = abap_true.
+ RAISE EXCEPTION TYPE zcx_abapgit_cancel.
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD refresh.
+
+ DATA ls_stable TYPE lvc_s_stbl.
+
+ ls_stable-row = 'X'.
+ ls_stable-col = 'X'.
+
+ mo_alv->refresh( ls_stable ).
+
+ ENDMETHOD.
+
+ METHOD get_selected.
+
+ DATA:
+ lv_condition TYPE string,
+ lr_exporting TYPE REF TO data,
+ lo_data_descr TYPE REF TO cl_abap_datadescr,
+ lo_selections TYPE REF TO cl_salv_selections,
+ lt_selected_rows TYPE salv_t_row.
+
+ FIELD-SYMBOLS:
+ TYPE any,
+ TYPE STANDARD TABLE,
+ TYPE any,
+ TYPE any,
+ TYPE abap_bool,
+ TYPE LINE OF salv_t_row.
+
+ CLEAR et_list.
+
+ " Make sure we don't accidentally return anything
+ IF mv_cancel = abap_true.
+ RETURN.
+ ENDIF.
+
+ ASSIGN mr_table->* TO .
+ ASSERT sy-subrc = 0.
+
+ lo_selections = mo_alv->get_selections( ).
+
+ IF lo_selections->get_selection_mode( ) = if_salv_c_selection_mode=>single.
+
+ lt_selected_rows = lo_selections->get_selected_rows( ).
+
+ LOOP AT lt_selected_rows ASSIGNING .
+
+ READ TABLE ASSIGNING INDEX .
+ CHECK IS ASSIGNED.
+
+ ASSIGN COMPONENT c_fieldname_selected OF STRUCTURE TO .
+ CHECK IS ASSIGNED.
+
+ = abap_true.
+
+ ENDLOOP.
+
+ ENDIF.
+
+ lv_condition = |{ c_fieldname_selected } = ABAP_TRUE|.
+
+ CREATE DATA lr_exporting LIKE LINE OF et_list.
+ ASSIGN lr_exporting->* TO .
+
+ lo_data_descr = mo_table_descr->get_table_line_type( ).
+
+ LOOP AT ASSIGNING WHERE (lv_condition).
+ CLEAR .
+
+ CASE lo_data_descr->kind.
+ WHEN cl_abap_elemdescr=>kind_elem.
+ ASSIGN COMPONENT c_default_column OF STRUCTURE TO .
+ ASSERT IS ASSIGNED.
+ = .
+
+ WHEN OTHERS.
+ MOVE-CORRESPONDING TO .
+
+ ENDCASE.
+ APPEND TO et_list.
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD create_alv.
+
+ FIELD-SYMBOLS TYPE STANDARD TABLE.
+
+ ASSIGN mr_table->* TO .
+ ASSERT sy-subrc = 0.
+
+ cl_salv_table=>factory(
+ IMPORTING
+ r_salv_table = ro_alv
+ CHANGING
+ t_table = ).
+
+ ENDMETHOD.
+
+ METHOD constructor.
+
+ DATA:
+ lv_object_list TYPE abap_bool,
+ lo_events TYPE REF TO cl_salv_events_table,
+ lo_columns TYPE REF TO cl_salv_columns_table,
+ lo_table_header TYPE REF TO cl_salv_form_text.
+
+ create_new_selectable_table( it_list ).
+ preselect( it_preselected_rows ).
+
+ TRY.
+ mo_alv = create_alv( ).
+ mo_alv->set_screen_popup(
+ start_column = is_position-start_column
+ end_column = is_position-end_column
+ start_line = is_position-start_row
+ end_line = is_position-end_row ).
+ ms_position = is_position.
+
+ lo_events = mo_alv->get_event( ).
+
+ SET HANDLER on_select_list_link_click FOR lo_events.
+ SET HANDLER on_select_list_function_click FOR lo_events.
+ SET HANDLER on_double_click FOR lo_events.
+
+ IF iv_title CN ' _0'.
+ mo_alv->get_display_settings( )->set_list_header( iv_title ).
+ ENDIF.
+
+ IF iv_header_text CN ' _0'.
+ CREATE OBJECT lo_table_header EXPORTING text = iv_header_text.
+ mo_alv->set_top_of_list( lo_table_header ).
+ ENDIF.
+
+ mo_alv->get_display_settings( )->set_striped_pattern( iv_striped_pattern ).
+ mo_alv->get_selections( )->set_selection_mode( iv_selection_mode ).
+
+ lo_columns = mo_alv->get_columns( ).
+ lo_columns->set_optimize( iv_optimize_col_width ).
+
+ TRY.
+ lo_columns->get_column( |{ c_fieldname_obj_type }| ).
+ lv_object_list = abap_true.
+ CATCH cx_salv_not_found ##NO_HANDLER.
+ ENDTRY.
+
+ setup_columns(
+ io_columns = lo_columns
+ iv_selection_mode = iv_selection_mode
+ iv_select_column_text = iv_select_column_text
+ it_columns_to_display = it_columns_to_display ).
+
+ setup_toolbar(
+ iv_object_list = lv_object_list
+ iv_selection_mode = iv_selection_mode ).
+
+ CATCH cx_salv_msg.
+ zcx_abapgit_exception=>raise( 'ALV error from object decision list' ).
+ ENDTRY.
+ ENDMETHOD.
+
+ METHOD create_new_selectable_table.
+
+ " create and populate a table on the fly derived from
+ " it_data with a select column
+
+ DATA:
+ lr_struct TYPE REF TO data,
+ lt_components TYPE cl_abap_structdescr=>component_table,
+ lo_data_descr TYPE REF TO cl_abap_datadescr,
+ lo_elem_descr TYPE REF TO cl_abap_elemdescr,
+ lo_struct_descr TYPE REF TO cl_abap_structdescr,
+ lo_struct_descr2 TYPE REF TO cl_abap_structdescr.
+
+ FIELD-SYMBOLS:
+ TYPE STANDARD TABLE,
+ TYPE abap_componentdescr,
+ TYPE data,
+ TYPE any,
+ TYPE any.
+
+ mo_table_descr ?= cl_abap_tabledescr=>describe_by_data( it_list ).
+ lo_data_descr = mo_table_descr->get_table_line_type( ).
+
+ CASE lo_data_descr->kind.
+ WHEN cl_abap_elemdescr=>kind_elem.
+ lo_elem_descr ?= mo_table_descr->get_table_line_type( ).
+ INSERT INITIAL LINE INTO lt_components ASSIGNING INDEX 1.
+ -name = c_default_column.
+ -type = lo_elem_descr.
+
+ WHEN cl_abap_elemdescr=>kind_struct.
+ lo_struct_descr ?= mo_table_descr->get_table_line_type( ).
+ lt_components = lo_struct_descr->get_components( ).
+
+ ENDCASE.
+
+ IF lt_components IS INITIAL.
+ RETURN.
+ ENDIF.
+
+ INSERT INITIAL LINE INTO lt_components ASSIGNING INDEX 1.
+ -name = c_fieldname_selected.
+ -type ?= cl_abap_datadescr=>describe_by_name( 'FLAG' ).
+
+ lo_struct_descr2 = cl_abap_structdescr=>create( lt_components ).
+ mo_table_descr = cl_abap_tabledescr=>create( lo_struct_descr2 ).
+
+ CREATE DATA mr_table TYPE HANDLE mo_table_descr.
+ ASSIGN mr_table->* TO .
+ ASSERT sy-subrc = 0.
+
+ CREATE DATA lr_struct TYPE HANDLE lo_struct_descr2.
+ ASSIGN lr_struct->* TO .
+ ASSERT sy-subrc = 0.
+
+ LOOP AT it_list ASSIGNING .
+ CLEAR .
+ CASE lo_data_descr->kind.
+ WHEN cl_abap_elemdescr=>kind_elem.
+ ASSIGN COMPONENT c_default_column OF STRUCTURE TO .
+ ASSERT IS ASSIGNED.
+ = .
+
+ WHEN OTHERS.
+ MOVE-CORRESPONDING TO .
+
+ ENDCASE.
+ INSERT INTO TABLE .
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD preselect.
+
+ FIELD-SYMBOLS:
+ TYPE STANDARD TABLE,
+ LIKE LINE OF it_preselected_rows,
+ TYPE any,
+ TYPE data.
+
+ ASSIGN mr_table->* TO .
+ ASSERT sy-subrc = 0.
+
+ LOOP AT it_preselected_rows ASSIGNING .
+
+ READ TABLE INDEX ASSIGNING .
+ IF sy-subrc <> 0.
+ zcx_abapgit_exception=>raise( |Preselected row { } doesn't exist| ).
+ ENDIF.
+
+ ASSIGN COMPONENT c_fieldname_selected OF STRUCTURE TO .
+ ASSERT sy-subrc = 0.
+ = abap_true.
+
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD on_double_click.
+
+ DATA lo_selections TYPE REF TO cl_salv_selections.
+
+ lo_selections = mo_alv->get_selections( ).
+
+ IF lo_selections->get_selection_mode( ) = if_salv_c_selection_mode=>single.
+ mo_alv->close_screen( ).
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD on_select_list_function_click.
+
+ " Work for functions of SAPMSVIM and OWN
+ CASE e_salv_function.
+ WHEN 'O.K.' OR 'OK'.
+ mv_cancel = abap_false.
+ mo_alv->close_screen( ).
+
+ WHEN 'ABR' OR 'CANCEL'.
+ " Canceled: clear list to overwrite nothing
+ mv_cancel = abap_true.
+ mo_alv->close_screen( ).
+
+ WHEN 'SALL' OR 'SEL_ALL'.
+ mark_visible( abap_true ).
+ refresh( ).
+
+ WHEN 'DSEL' OR 'SEL_DEL'.
+ mark_visible( abap_false ).
+ refresh( ).
+
+ WHEN 'SEL_KEY'.
+ mark_selected( ).
+ refresh( ).
+
+ WHEN 'SEL_CAT'.
+ mark_category( ask_user_for_obj_category( ) ).
+ refresh( ).
+
+ WHEN OTHERS.
+ mv_cancel = abap_true.
+ mo_alv->close_screen( ).
+
+ ENDCASE.
+
+ ENDMETHOD.
+
+ METHOD mark_all.
+
+ FIELD-SYMBOLS:
+ TYPE STANDARD TABLE,
+ TYPE any,
+ TYPE abap_bool.
+
+ ASSIGN mr_table->* TO .
+ ASSERT sy-subrc = 0.
+
+ LOOP AT ASSIGNING .
+
+ ASSIGN COMPONENT c_fieldname_selected OF STRUCTURE TO .
+ ASSERT sy-subrc = 0.
+ = iv_selected.
+
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD are_all_marked.
+
+ DATA lv_index LIKE LINE OF it_scope.
+
+ FIELD-SYMBOLS:
+ TYPE STANDARD TABLE,
+ TYPE any,
+ TYPE abap_bool.
+
+ ASSIGN mr_table->* TO .
+ ASSERT sy-subrc = 0.
+
+ LOOP AT it_scope INTO lv_index.
+
+ READ TABLE ASSIGNING INDEX lv_index.
+ CHECK sy-subrc = 0.
+
+ ASSIGN COMPONENT c_fieldname_selected OF STRUCTURE TO .
+ ASSERT sy-subrc = 0.
+
+ IF = abap_true.
+ rv_yes = abap_true.
+ ELSE.
+ rv_yes = abap_false.
+ RETURN.
+ ENDIF.
+
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD mark_selected.
+
+ DATA lt_clear TYPE salv_t_row.
+ DATA lt_scope TYPE lvc_t_fidx.
+
+ lt_scope = mo_alv->get_selections( )->get_selected_rows( ).
+
+ IF lines( lt_scope ) > 0.
+ mark_indexed(
+ it_scope = lt_scope
+ iv_selected = boolc( are_all_marked( lt_scope ) = abap_false ) ).
+ mo_alv->get_selections( )->set_selected_rows( lt_clear ).
+ ELSE.
+ MESSAGE 'Select rows first to mark them' TYPE 'S'.
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD mark_visible.
+
+ DATA lt_filters TYPE lvc_t_filt.
+ DATA lt_scope TYPE lvc_t_fidx.
+
+ FIELD-SYMBOLS TYPE STANDARD TABLE.
+
+ ASSIGN mr_table->* TO .
+ ASSERT sy-subrc = 0.
+
+ " If nothing selected, select all VISIBLE
+ lt_filters = cl_salv_controller_metadata=>get_lvc_filter( mo_alv->get_filters( ) ).
+ IF lines( lt_filters ) = 0.
+ mark_all( iv_selected ). " No filters - just select all
+ RETURN.
+ ENDIF.
+
+ CALL FUNCTION 'LVC_FILTER_APPLY'
+ EXPORTING
+ it_filter = lt_filters
+ IMPORTING
+ et_filter_index_inside = lt_scope
+ TABLES
+ it_data = .
+
+ mark_indexed(
+ it_scope = lt_scope
+ iv_selected = iv_selected ).
+
+ ENDMETHOD.
+
+ METHOD mark_indexed.
+
+ DATA lv_index LIKE LINE OF it_scope.
+
+ FIELD-SYMBOLS:
+ TYPE STANDARD TABLE,
+ TYPE any,
+ TYPE abap_bool.
+
+ ASSIGN mr_table->* TO .
+ ASSERT sy-subrc = 0.
+
+ LOOP AT it_scope INTO lv_index.
+
+ READ TABLE ASSIGNING INDEX lv_index.
+ CHECK sy-subrc = 0.
+
+ ASSIGN COMPONENT c_fieldname_selected OF STRUCTURE TO .
+ ASSERT sy-subrc = 0.
+
+ IF iv_invert = abap_true.
+ = boolc( = abap_false ).
+ ELSE.
+ = iv_selected.
+ ENDIF.
+
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD ask_user_for_obj_category.
+
+ DATA:
+ lv_answer TYPE c LENGTH 1,
+ ls_position TYPE zif_abapgit_popups=>ty_popup_position,
+ ls_selection TYPE spopli,
+ lt_selection TYPE TABLE OF spopli.
+
+ ls_selection-varoption = 'Packages'.
+ APPEND ls_selection TO lt_selection.
+ ls_selection-varoption = 'DDIC objects'.
+ APPEND ls_selection TO lt_selection.
+ ls_selection-varoption = 'Source code'.
+ APPEND ls_selection TO lt_selection.
+ ls_selection-varoption = 'Enhancements'.
+ APPEND ls_selection TO lt_selection.
+
+ ls_position-start_column = ms_position-start_column + 20.
+ ls_position-start_row = ms_position-start_row + 5.
+
+ CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
+ EXPORTING
+ titel = 'Selection'
+ textline1 = 'Which objects should be added to the selection?'
+ start_col = ls_position-start_column
+ start_row = ls_position-start_row
+ cursorline = 1
+ IMPORTING
+ answer = lv_answer
+ TABLES
+ t_spopli = lt_selection
+ EXCEPTIONS
+ OTHERS = 1.
+ IF sy-subrc <> 0 OR lv_answer = c_answer_cancel.
+ RETURN.
+ ENDIF.
+
+ READ TABLE lt_selection INDEX lv_answer INTO ls_selection.
+ IF sy-subrc = 0.
+ rv_category = ls_selection-varoption.
+ ENDIF.
+
+ ENDMETHOD.
+
+ METHOD mark_category.
+
+ FIELD-SYMBOLS:
+ TYPE STANDARD TABLE,
+ TYPE tadir-object,
+ TYPE any,
+ TYPE abap_bool.
+
+ IF iv_category IS INITIAL.
+ RETURN.
+ ENDIF.
+
+ ASSIGN mr_table->* TO .
+ ASSERT sy-subrc = 0.
+
+ LOOP AT ASSIGNING .
+
+ ASSIGN COMPONENT c_fieldname_obj_type OF STRUCTURE TO .
+ ASSERT sy-subrc = 0.
+
+ ASSIGN COMPONENT c_fieldname_selected OF STRUCTURE TO .
+ ASSERT sy-subrc = 0.
+
+ CASE iv_category.
+ WHEN 'Packages'.
+ IF <> 'DEVC'.
+ CONTINUE.
+ ENDIF.
+ WHEN 'DDIC objects'.
+ IF zcl_abapgit_objects_activation=>is_ddic_type( ) = abap_false.
+ CONTINUE.
+ ENDIF.
+ WHEN 'Source code'.
+ IF 'CLAS,FUGR,INTF,PROG,TYPE' NS .
+ CONTINUE.
+ ENDIF.
+ WHEN 'Enhancements'.
+ IF 'ENHO,ENHS,ENHC,ENSC' NS .
+ CONTINUE.
+ ENDIF.
+ WHEN OTHERS.
+ RETURN. " Unexpected category
+ ENDCASE.
+
+ = abap_true.
+
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD on_select_list_link_click.
+
+ FIELD-SYMBOLS:
+ TYPE STANDARD TABLE,
+ TYPE any,
+ TYPE abap_bool.
+
+ ASSIGN mr_table->* TO .
+ ASSERT sy-subrc = 0.
+
+ READ TABLE ASSIGNING INDEX row.
+ IF sy-subrc = 0.
+
+ ASSIGN COMPONENT c_fieldname_selected OF STRUCTURE TO .
+ ASSERT sy-subrc = 0.
+ = boolc( = abap_false ).
+
+ ENDIF.
+
+ refresh( ).
+
+ ENDMETHOD.
+
+ METHOD setup_columns.
+
+ DATA:
+ lt_columns TYPE salv_t_column_ref,
+ ls_column TYPE salv_s_column_ref,
+ lo_column TYPE REF TO cl_salv_column_list.
+
+ FIELD-SYMBOLS TYPE zif_abapgit_popups=>ty_alv_column.
+
+ lt_columns = io_columns->get( ).
+
+ LOOP AT lt_columns INTO ls_column.
+
+ lo_column ?= ls_column-r_column.
+
+ IF iv_selection_mode = if_salv_c_selection_mode=>multiple AND
+ ls_column-columnname = c_fieldname_selected.
+ lo_column->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).
+ lo_column->set_output_length( 20 ).
+ lo_column->set_short_text( |{ iv_select_column_text }| ).
+ lo_column->set_medium_text( |{ iv_select_column_text }| ).
+ lo_column->set_long_text( |{ iv_select_column_text }| ).
+ CONTINUE.
+ ENDIF.
+
+ READ TABLE it_columns_to_display
+ ASSIGNING
+ WITH KEY name = ls_column-columnname.
+
+ CASE sy-subrc.
+ WHEN 0.
+ IF -text CN ' _0'.
+ lo_column->set_short_text( |{ -text }| ).
+ lo_column->set_medium_text( |{ -text }| ).
+ lo_column->set_long_text( |{ -text }| ).
+ ENDIF.
+
+ IF -length > 0.
+ lo_column->set_output_length( -length ).
+ ENDIF.
+
+ IF -show_icon = abap_true.
+ lo_column->set_icon( abap_true ).
+ ENDIF.
+
+ IF -center = abap_true.
+ lo_column->set_alignment( if_salv_c_alignment=>centered ).
+ ENDIF.
+
+ WHEN OTHERS.
+ lo_column->set_technical( abap_true ). " Hide column
+
+ ENDCASE.
+
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ METHOD setup_toolbar.
+
+ DATA:
+ lv_report TYPE sy-repid,
+ lv_pfstatus TYPE sy-pfkey,
+ lo_functions TYPE REF TO cl_salv_functions_list,
+ lt_func_list TYPE salv_t_ui_func,
+ lv_fn TYPE string,
+ ls_func LIKE LINE OF lt_func_list.
+
+ CALL FUNCTION 'RS_CUA_STATUS_CHECK'
+ EXPORTING
+ program = sy-cprog
+ objectname = c_own_pfstatus
+ EXCEPTIONS
+ object_not_found = 1
+ OTHERS = 2.
+
+ IF sy-subrc = 0.
+
+ mo_alv->set_screen_status(
+ report = sy-cprog
+ pfstatus = c_own_pfstatus ).
+
+ ELSE.
+
+ lv_report = 'SAPMSVIM'.
+
+ IF iv_selection_mode = if_salv_c_selection_mode=>single.
+ lv_pfstatus = '110'.
+ ELSE.
+ lv_pfstatus = '102'.
+ ENDIF.
+
+ mo_alv->set_screen_status(
+ report = lv_report
+ pfstatus = lv_pfstatus ).
+
+ ENDIF.
+
+ lo_functions = mo_alv->get_functions( ).
+
+ lt_func_list = lo_functions->get_functions( ).
+ LOOP AT lt_func_list INTO ls_func.
+ lv_fn = ls_func-r_function->get_name( ).
+ IF lv_fn = 'OK' OR lv_fn = 'CANCEL'
+ OR lv_fn = 'O.K.' OR lv_fn = 'EABR'.
+ ls_func-r_function->set_visible( abap_true ).
+ ELSEIF iv_object_list = abap_true.
+ ls_func-r_function->set_visible( abap_true ).
+ ELSE.
+ ls_func-r_function->set_visible( abap_false ).
+ ENDIF.
+ ENDLOOP.
+
+ ENDMETHOD.
+
+ENDCLASS.
+
+CLASS zcl_abapgit_popups IMPLEMENTATION.
+ METHOD add_field.
+
+ FIELD-SYMBOLS: LIKE LINE OF ct_fields.
+
+ APPEND INITIAL LINE TO ct_fields ASSIGNING .
+ -tabname = iv_tabname.
+ -fieldname = iv_fieldname.
+