From f5e7b9550e28f11d7a15aab22c2a9ea60bcb655d Mon Sep 17 00:00:00 2001
From: Emmanuel Abram-Profeta @{outputs('Format_markdown_to_html')['html']}
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"
+ ]
+ }
+ },
+ "Create_CSV_payload": {
+ "type": "Compose",
+ "inputs": "@\r\nconcat('OrderID,Date,CustomerID,Product,Quantity,UnitPrice,ShippingAddress,PaymentMethod,OrderStatus,TrackingNumber,ItemsInCart,CouponCode,ReferralSource,TotalPrice\r\n',join(\r\n xpath(\r\n xml(triggerBody()?['content']),\r\n '/*[local-name()=\"Z_GET_ORDERS_ANALYSIS\"]/*[local-name()=\"IT_CSV\"]/*[local-name()=\"ZTY_CSV_LINE\"]/*[local-name()=\"LINE\"]/text()'\r\n ),\r\n '\r\n'))\r\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": "10.7.0.10",
+ "GatewayService": "sapgw00",
+ "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/Analysis.htm b/agentic-sap-workflows/Analysis.htm
new file mode 100644
index 0000000..d880615
--- /dev/null
+++ b/agentic-sap-workflows/Analysis.htm
@@ -0,0 +1,1011 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+From: Emmanuel
+Abram-Profeta
+
+Sent: Thursday,
+January 22, 2026 5:45 PM
+
+To: Emmanuel
+Abram-Profeta
+
+Subject: Analysis
+
+
+
+Analysis of Trends
+and Predictions
+
+Data Cleaned:
+Orders Excluded (ORD200000, ORD200001, ORD200002, ORD200007, ORD200008,
+ORD200015)
+
+
+
+
+
+
+
+Key Trends
+
+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:
+- 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.
+
+3. Price Trends:
+- 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 2023–2024.
+
+4. Customer Payment Methods:
+- Credit cards and debit cards dominate the payment methods (~70% of
+transactions).
+- There's minimal use of Gift Cards or Cash for
+transactional purposes.
+
+5. Seasonality & Time Patterns:
+- 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.
+
+6. Referral Sources:
+- 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.
+
+2. Order Status Improvements Needed:
+- 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.
+
+3. Discount Strategies:
+- 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.
+
+4. Revenue Forecast (2024–2025):
+- 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.
+
+5. Shipping and Logistics:
+- Efficient performance in shipments should foster repeat customers. However, pending and
+returned orders should be minimized through proactive customer
+service interventions.
+
+6. Seasonal Marketing Push:
+- 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.
+
+
+
+
+
+
diff --git a/agentic-sap-workflows/Analysis_files/colorschememapping.xml b/agentic-sap-workflows/Analysis_files/colorschememapping.xml
new file mode 100644
index 0000000..6a0069c
--- /dev/null
+++ b/agentic-sap-workflows/Analysis_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/agentic-sap-workflows/Analysis_files/filelist.xml b/agentic-sap-workflows/Analysis_files/filelist.xml
new file mode 100644
index 0000000..ad84124
--- /dev/null
+++ b/agentic-sap-workflows/Analysis_files/filelist.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/agentic-sap-workflows/Analysis_files/themedata.thmx b/agentic-sap-workflows/Analysis_files/themedata.thmx
new file mode 100644
index 0000000000000000000000000000000000000000..f3afc8f92efb51ef2b6f8977f6a7fdbf5d9f32e5
GIT binary patch
literal 3432
zcmaKvc{tQ-8^WXn1SLsh_brr=Z0~T4fRGpOYONrhOz7K8Xm?h$Qb8UUIdCQM|a-u
zd=lQ;^#B6uo~R^PAMBb8S?LrDfzZ;E3cLC0a{*0f7;DHmc?9FKEgdPy3fRC2KdWLo
zNwi74!_TYXj6apLO=@n0s>DYbCFWY-!xsJAO)53-V*}1$pAPM-()1_=i${HnV(SYs
zpXOajOjVuh)*WA1;$jhrj4u??_KH!>BzpSm)Mbg
zDwX)S&+diQ9$)zfq?^*9Qt?}%E#}`j$>l7Gr~!8&KAFW9_58%usWCfr|Q%HCrO1yYD_Fhyfi!{o)G4rfN`)W`l(qeez(uVJ$3^^Hjp5X`@A{
zj_Y7I`;f8zl%fkHl91|;8b6bh&-YH*WOxT;F|Km8G^M!vxQYzx%{Og}ER$Z)r}I(C
zF!7vsd0Z?vXW4`;b}Jb<{ko=ZZ|ob@%6}X6x|s!vp&Cr0P66r+^lQ^^Z2zp9}N{ujW5i_sPxZrkK*90
zcG7u_tVwQtvI);O!=(w};x~o@?b2vUC(q(?C~tRlGS{q87sfn7bQF7+STiFuRwFek
zydgbF7QQL^Nhgnn8YhZ#F9$em;HNiPG?8>z|)(d2&y|bIqL&J=YcBGll(q(tO
zBaPLU-IHfPLvUwOKZ@%I!DR+$8C>WTFv1Qf>qsYSCu{T;Uss$HW;14_s!}Tc29FA*Y7c*xXF|;hYS0fk5~!$$bh^P5MCbd`}-~8
zo32(VGd-h#<`g#jwP3SH@UG~=Yf_C|bVx7T*5}ZKxO1d=Zsx26-3n0QxHOpdB8?;`
z#Q){_c4ozR=sG^y-`z0Oc<@b-MFxzGjO^PL-sVRV4-p^(176RewBKNqFx|8i@)Dns
z{&)n9y%X!!5uxC1)3;AEQ!OnAi?|TqR{2Wp!&>0sN#Yyfdv}RJvny_LMLBG~0
zgmQQ!a!Cv9fz>-FDoJHP`PEy-i+pov;k>ehVS|@9(j*`74Oa7<7nlF)<}C_5QbuF;
zUo9)#aM)o-VuVj)8ns4Wc8d_GU!Ii}zo
zCcZ0dlh&AxbimUV*HAXVASc|joKbs1B+||egu2ktn=sp*E6ZMs&qad3lC{|!UV+;P
zxM;O0tmp&hU0!v$mTK6Cs*&=&tnGAQ=GSUl25S>@p7R;-_>t3+rw
z+oqb+1|(m}*d;@7=#ZtcbShl2=cH8}T$Em6*v?nKyHLC%t#j!_
z`tJ1UvX$P=*~?#eS9``8lEJHRY}@m!J10(#saAn^V3(h6;Yn?`
zP9#1HV8#sl%m8Lm2e)5B>WgUiX9F)}T|89OOmV76E%%vR6EKE$s%!QOPy4tlT(vX2
zaNKb{!KRxp&c3psX8j=dpt<8)%Z3-*+R}l~qS=7|Y+v1Lx9Jdt_7gpXh9cBHTi)8o$|nP($nD``eu}7DB+>fQj`@yG
zr*EiiR%`31iJg*4kFEUu#%3s8$_xF#SA)3Mb;L4thiv}sr;;P#?6VI1#4nw;)1%`;
z&v9UnC+w9Ttxg9%{W7x>JNul70uQ3{6BkP*)KQ*2pUQifYtm+%dU;K@9JOAlqMU(m!4xO
zpBR5qJ$}%N38=yKF&~K8}Ul-!!_DjG9<*znHWD+0GPSQj&oq`YBgOn~;X~
zSKzr*xt^{(c1mk@y*bX748iD|&qc~A-sJEGNv;e!x9#`>A!yN}z8%B-?%
zeEWB@r_f*c(>mEn(>#5skYT!YSF5dUY0Kt^6@E^R7Wopn(@T{SnTENIt<3SU2;A+;
zK;LG~Ekx<zT`G_JQ@?QY7E9$d5(aQ
z_?gvFsix~y>nXX-Dy!pf0h%1`w-t`JomqUNKajoxbdonB=s0|l!J0W$b+1MY*sK>K
zb~s{D>W3V3s+=D5HU5OR%Z!;^KWIycYx_0iZyhjN?@ceS7e{P$1-Rk{|7N9GMlj^SJSEKLys;u$2r^2C^
z#UU0@S^1m*HVNbOyw^!qdr_sTg()`kB85fTT@9}dcY`7xeZrjxZ-+Fwu!oHT__EA$
zkE_0^@+Z2>odG!=nQLPv@6tn`bo9Ox#g&-Qy>cLtUd~dD{l#`CXk-BY8~drh{qX(b
z5nu-Yr@+q~{C6~rTF)P-_~*c%x$^HoKI%37z?Xlq<`3onS?OoU`&()3S4w{(-_II9
hH^JW;`%M4L=Kr*W8JwQsdmue^I8oj2e18}K{tbeD?5zL*
literal 0
HcmV?d00001
diff --git a/agentic-sap-workflows/AzureOpenAIResultsSchema.json b/agentic-sap-workflows/AzureOpenAIResultsSchema.json
new file mode 100644
index 0000000..296c4aa
--- /dev/null
+++ b/agentic-sap-workflows/AzureOpenAIResultsSchema.json
@@ -0,0 +1,245 @@
+{
+ "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"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/agentic-sap-workflows/CSV document from SAP contains invalid data.htm b/agentic-sap-workflows/CSV document from SAP contains invalid data.htm
new file mode 100644
index 0000000..88b7970
--- /dev/null
+++ b/agentic-sap-workflows/CSV document from SAP contains invalid data.htm
@@ -0,0 +1,1256 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+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
+
+
+
+
+
+
diff --git a/agentic-sap-workflows/CSV document from SAP contains invalid data_files/colorschememapping.xml b/agentic-sap-workflows/CSV document from SAP contains invalid data_files/colorschememapping.xml
new file mode 100644
index 0000000..6a0069c
--- /dev/null
+++ b/agentic-sap-workflows/CSV document from SAP contains invalid data_files/colorschememapping.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/agentic-sap-workflows/CSV document from SAP contains invalid data_files/filelist.xml b/agentic-sap-workflows/CSV document from SAP contains invalid data_files/filelist.xml
new file mode 100644
index 0000000..35f25f8
--- /dev/null
+++ b/agentic-sap-workflows/CSV document from SAP contains invalid data_files/filelist.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/agentic-sap-workflows/CSV document from SAP contains invalid data_files/themedata.thmx b/agentic-sap-workflows/CSV document from SAP contains invalid data_files/themedata.thmx
new file mode 100644
index 0000000000000000000000000000000000000000..f3afc8f92efb51ef2b6f8977f6a7fdbf5d9f32e5
GIT binary patch
literal 3432
zcmaKvc{tQ-8^WXn1SLsh_brr=Z0~T4fRGpOYONrhOz7K8Xm?h$Qb8UUIdCQM|a-u
zd=lQ;^#B6uo~R^PAMBb8S?LrDfzZ;E3cLC0a{*0f7;DHmc?9FKEgdPy3fRC2KdWLo
zNwi74!_TYXj6apLO=@n0s>DYbCFWY-!xsJAO)53-V*}1$pAPM-()1_=i${HnV(SYs
zpXOajOjVuh)*WA1;$jhrj4u??_KH!>BzpSm)Mbg
zDwX)S&+diQ9$)zfq?^*9Qt?}%E#}`j$>l7Gr~!8&KAFW9_58%usWCfr|Q%HCrO1yYD_Fhyfi!{o)G4rfN`)W`l(qeez(uVJ$3^^Hjp5X`@A{
zj_Y7I`;f8zl%fkHl91|;8b6bh&-YH*WOxT;F|Km8G^M!vxQYzx%{Og}ER$Z)r}I(C
zF!7vsd0Z?vXW4`;b}Jb<{ko=ZZ|ob@%6}X6x|s!vp&Cr0P66r+^lQ^^Z2zp9}N{ujW5i_sPxZrkK*90
zcG7u_tVwQtvI);O!=(w};x~o@?b2vUC(q(?C~tRlGS{q87sfn7bQF7+STiFuRwFek
zydgbF7QQL^Nhgnn8YhZ#F9$em;HNiPG?8>z|)(d2&y|bIqL&J=YcBGll(q(tO
zBaPLU-IHfPLvUwOKZ@%I!DR+$8C>WTFv1Qf>qsYSCu{T;Uss$HW;14_s!}Tc29FA*Y7c*xXF|;hYS0fk5~!$$bh^P5MCbd`}-~8
zo32(VGd-h#<`g#jwP3SH@UG~=Yf_C|bVx7T*5}ZKxO1d=Zsx26-3n0QxHOpdB8?;`
z#Q){_c4ozR=sG^y-`z0Oc<@b-MFxzGjO^PL-sVRV4-p^(176RewBKNqFx|8i@)Dns
z{&)n9y%X!!5uxC1)3;AEQ!OnAi?|TqR{2Wp!&>0sN#Yyfdv}RJvny_LMLBG~0
zgmQQ!a!Cv9fz>-FDoJHP`PEy-i+pov;k>ehVS|@9(j*`74Oa7<7nlF)<}C_5QbuF;
zUo9)#aM)o-VuVj)8ns4Wc8d_GU!Ii}zo
zCcZ0dlh&AxbimUV*HAXVASc|joKbs1B+||egu2ktn=sp*E6ZMs&qad3lC{|!UV+;P
zxM;O0tmp&hU0!v$mTK6Cs*&=&tnGAQ=GSUl25S>@p7R;-_>t3+rw
z+oqb+1|(m}*d;@7=#ZtcbShl2=cH8}T$Em6*v?nKyHLC%t#j!_
z`tJ1UvX$P=*~?#eS9``8lEJHRY}@m!J10(#saAn^V3(h6;Yn?`
zP9#1HV8#sl%m8Lm2e)5B>WgUiX9F)}T|89OOmV76E%%vR6EKE$s%!QOPy4tlT(vX2
zaNKb{!KRxp&c3psX8j=dpt<8)%Z3-*+R}l~qS=7|Y+v1Lx9Jdt_7gpXh9cBHTi)8o$|nP($nD``eu}7DB+>fQj`@yG
zr*EiiR%`31iJg*4kFEUu#%3s8$_xF#SA)3Mb;L4thiv}sr;;P#?6VI1#4nw;)1%`;
z&v9UnC+w9Ttxg9%{W7x>JNul70uQ3{6BkP*)KQ*2pUQifYtm+%dU;K@9JOAlqMU(m!4xO
zpBR5qJ$}%N38=yKF&~K8}Ul-!!_DjG9<*znHWD+0GPSQj&oq`YBgOn~;X~
zSKzr*xt^{(c1mk@y*bX748iD|&qc~A-sJEGNv;e!x9#`>A!yN}z8%B-?%
zeEWB@r_f*c(>mEn(>#5skYT!YSF5dUY0Kt^6@E^R7Wopn(@T{SnTENIt<3SU2;A+;
zK;LG~Ekx<zT`G_JQ@?QY7E9$d5(aQ
z_?gvFsix~y>nXX-Dy!pf0h%1`w-t`JomqUNKajoxbdonB=s0|l!J0W$b+1MY*sK>K
zb~s{D>W3V3s+=D5HU5OR%Z!;^KWIycYx_0iZyhjN?@ceS7e{P$1-Rk{|7N9GMlj^SJSEKLys;u$2r^2C^
z#UU0@S^1m*HVNbOyw^!qdr_sTg()`kB85fTT@9}dcY`7xeZrjxZ-+Fwu!oHT__EA$
zkE_0^@+Z2>odG!=nQLPv@6tn`bo9Ox#g&-Qy>cLtUd~dD{l#`CXk-BY8~drh{qX(b
z5nu-Yr@+q~{C6~rTF)P-_~*c%x$^HoKI%37z?Xlq<`3onS?OoU`&()3S4w{(-_II9
hH^JW;`%M4L=Kr*W8JwQsdmue^I8oj2e18}K{tbeD?5zL*
literal 0
HcmV?d00001
diff --git a/agentic-sap-workflows/Online-Store-Orders-Sample.csv b/agentic-sap-workflows/Online-Store-Orders-Sample.csv
new file mode 100644
index 0000000..471f8a8
--- /dev/null
+++ b/agentic-sap-workflows/Online-Store-Orders-Sample.csv
@@ -0,0 +1,20 @@
+OrderID,Date,CustomerID,Product,Quantity,UnitPrice,ShippingAddress,PaymentMethod,OrderStatus,TrackingNumber,ItemsInCart,CouponCode,ReferralSource,TotalPrice
+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
+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
+ORD200006,6/17/2025,C83492,Laptop,1,664.42,986 Main St,Gift Card,Returned,TRK96417362,6,SAVE10,Facebook,664.42
+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
+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
+ORD200015,7/17/2023,C39416,Printer,1,473.96,942 Main St,Cash,Delivered,TRK54930938,3,,Google,473.96
diff --git a/agentic-sap-workflows/Online-Store-Orders.csv b/agentic-sap-workflows/Online-Store-Orders.csv
new file mode 100644
index 0000000..c23acb5
--- /dev/null
+++ b/agentic-sap-workflows/Online-Store-Orders.csv
@@ -0,0 +1,1201 @@
+OrderID,Date,CustomerID,Product,Quantity,UnitPrice,ShippingAddress,PaymentMethod,OrderStatus,TrackingNumber,ItemsInCart,CouponCode,ReferralSource,TotalPrice
+ORD200000,2023-01-04,C72649,Monitor,5,570.62,928 Main St,Debit Card,Shipped,TRK37947903,7,SAVE10,Instagram,2853.1
+ORD200001,2024-08-23,C75739,Phone,2,151.35,823 Main St,Online,Shipped,TRK91186779,3,SAVE10,Referral,302.7
+ORD200002,2024-02-27,C81728,Tablet,5,550.68,512 Main St,Credit Card,Cancelled,TRK42903982,8,FREESHIP,Email,2753.4
+ORD200003,2023-10-15,C33540,Chair,1,273.19,275 Main St,Debit Card,Returned,TRK62788070,5,SAVE10,Facebook,273.19
+ORD200004,2025-05-08,C81840,Printer,4,626.01,668 Main St,Online,Delivered,TRK29241424,8,SAVE10,Email,2504.04
+ORD200005,2023-10-23,C37249,Phone,2,245.86,934 Main St,Credit Card,Shipped,TRK72976927,4,SAVE10,Instagram,491.72
+ORD200006,2025-06-17,C83492,Laptop,1,664.42,986 Main St,Gift Card,Returned,TRK96417362,6,SAVE10,Facebook,664.42
+ORD200007,2023-05-12,C41460,Monitor,5,149.55,706 Main St,Cash,Shipped,TRK78809193,9,FREESHIP,Facebook,747.75
+ORD200008,2025-04-02,C26817,Phone,2,134.28,904 Main St,Gift Card,Cancelled,TRK61042692,2,,Email,268.56
+ORD200009,2023-11-21,C31946,Desk,4,509.38,102 Main St,Credit Card,Shipped,TRK33478363,6,SAVE10,Google,2037.52
+ORD200010,2023-12-29,C43443,Tablet,5,625.97,333 Main St,Credit Card,Returned,TRK98859248,9,WINTER15,Instagram,3129.85
+ORD200011,2024-02-17,C93861,Monitor,3,49.14,831 Main St,Online,Returned,TRK48234646,7,SAVE10,Email,147.42
+ORD200012,2024-10-15,C38785,Monitor,2,180.5,179 Main St,Debit Card,Pending,TRK20419991,6,FREESHIP,Referral,361
+ORD200013,2023-08-30,C88348,Laptop,3,201.49,903 Main St,Credit Card,Returned,TRK81913874,4,FREESHIP,Facebook,604.47
+ORD200014,2023-03-27,C98474,Tablet,2,393.33,980 Main St,Debit Card,Pending,TRK79186539,3,SAVE10,Instagram,786.66
+ORD200015,2023-07-17,C39416,Printer,1,473.96,942 Main St,Cash,Delivered,TRK54930938,3,,Google,473.96
+ORD200016,2023-01-24,C28976,Printer,2,533.81,914 Main St,Credit Card,Pending,TRK13194259,3,FREESHIP,Email,1067.62
+ORD200017,2024-03-02,C60672,Tablet,1,423.4,382 Main St,Debit Card,Shipped,TRK11972116,3,,Referral,423.4
+ORD200018,2025-03-26,C84329,Desk,1,431.44,891 Main St,Gift Card,Pending,TRK65191045,3,SAVE10,Facebook,431.44
+ORD200019,2023-01-23,C14552,Monitor,5,224,273 Main St,Cash,Returned,TRK59101365,9,SAVE10,Google,1120
+ORD200020,2023-05-08,C54829,Chair,5,62.51,587 Main St,Cash,Pending,TRK16718651,9,WINTER15,Instagram,312.55
+ORD200021,2024-11-17,C99023,Monitor,4,342.95,569 Main St,Cash,Delivered,TRK52646983,6,,Google,1371.8
+ORD200022,2023-01-29,C34416,Monitor,2,49.62,633 Main St,Online,Pending,TRK75937350,2,SAVE10,Google,99.24
+ORD200023,2025-04-09,C42372,Phone,4,273.25,755 Main St,Debit Card,Cancelled,TRK36168083,5,FREESHIP,Referral,1093
+ORD200024,2024-10-30,C17470,Laptop,2,230.95,956 Main St,Online,Delivered,TRK28775057,3,WINTER15,Referral,461.9
+ORD200025,2024-07-24,C42577,Monitor,1,399.98,709 Main St,Debit Card,Delivered,TRK69423327,3,WINTER15,Email,399.98
+ORD200026,2024-03-06,C21944,Laptop,5,59.55,296 Main St,Online,Delivered,TRK80276812,6,,Referral,297.75
+ORD200027,2024-02-22,C97593,Printer,1,472.74,881 Main St,Online,Shipped,TRK89117573,6,WINTER15,Google,472.74
+ORD200028,2023-11-21,C59823,Phone,4,160.07,568 Main St,Online,Pending,TRK65895539,5,,Email,640.28
+ORD200029,2024-09-20,C33260,Desk,3,423.53,930 Main St,Credit Card,Delivered,TRK59744090,6,SAVE10,Referral,1270.59
+ORD200030,2025-03-22,C44267,Monitor,2,426.7,895 Main St,Online,Pending,TRK54751444,5,SAVE10,Referral,853.4
+ORD200031,2023-06-30,C26445,Chair,3,500.08,996 Main St,Debit Card,Returned,TRK31229981,6,,Facebook,1500.24
+ORD200032,2023-05-01,C12388,Tablet,5,536.72,830 Main St,Cash,Delivered,TRK99261395,10,,Email,2683.6
+ORD200033,2023-06-05,C52184,Chair,1,162.77,912 Main St,Online,Cancelled,TRK73312471,4,WINTER15,Facebook,162.77
+ORD200034,2023-01-07,C67195,Chair,4,576.52,926 Main St,Credit Card,Pending,TRK55467915,5,WINTER15,Facebook,2306.08
+ORD200035,2024-12-07,C50304,Monitor,2,465.15,128 Main St,Online,Shipped,TRK46850888,2,SAVE10,Facebook,930.3
+ORD200036,2025-05-08,C59337,Laptop,2,534.43,465 Main St,Debit Card,Pending,TRK50961250,5,,Facebook,1068.86
+ORD200037,2024-10-14,C10054,Laptop,2,76.74,409 Main St,Cash,Returned,TRK94005261,7,SAVE10,Instagram,153.48
+ORD200038,2024-12-19,C15924,Laptop,1,245.89,549 Main St,Debit Card,Delivered,TRK14835975,3,SAVE10,Google,245.89
+ORD200039,2025-02-27,C96664,Printer,3,256.46,666 Main St,Credit Card,Delivered,TRK85508960,4,SAVE10,Referral,769.38
+ORD200040,2023-08-20,C84766,Desk,2,344.02,267 Main St,Online,Delivered,TRK78967923,4,FREESHIP,Instagram,688.04
+ORD200041,2023-12-05,C20212,Monitor,3,611.45,657 Main St,Gift Card,Pending,TRK69733327,4,FREESHIP,Instagram,1834.35
+ORD200042,2024-05-06,C28712,Printer,2,151.66,980 Main St,Cash,Cancelled,TRK40772558,6,,Instagram,303.32
+ORD200043,2023-12-14,C60572,Chair,3,499.21,871 Main St,Online,Cancelled,TRK20351666,8,,Instagram,1497.63
+ORD200044,2025-04-21,C73225,Phone,2,550.18,996 Main St,Gift Card,Returned,TRK73848522,3,FREESHIP,Referral,1100.36
+ORD200045,2024-02-10,C17388,Chair,1,317.25,157 Main St,Debit Card,Returned,TRK47077395,1,SAVE10,Facebook,317.25
+ORD200046,2024-06-26,C43212,Monitor,4,550.14,223 Main St,Debit Card,Pending,TRK25100762,4,FREESHIP,Instagram,2200.56
+ORD200047,2023-07-19,C38134,Desk,2,209.94,323 Main St,Credit Card,Returned,TRK42450754,3,FREESHIP,Email,419.88
+ORD200048,2023-08-26,C12408,Monitor,2,80.77,464 Main St,Debit Card,Shipped,TRK38938858,4,,Google,161.54
+ORD200049,2023-10-07,C11985,Printer,1,30.44,633 Main St,Credit Card,Shipped,TRK53272402,1,SAVE10,Email,30.44
+ORD200050,2023-07-31,C96494,Tablet,1,179.22,446 Main St,Online,Cancelled,TRK14675049,6,FREESHIP,Instagram,179.22
+ORD200051,2024-12-30,C36778,Tablet,1,388.33,434 Main St,Cash,Returned,TRK67610289,2,SAVE10,Facebook,388.33
+ORD200052,2024-09-08,C30513,Tablet,1,586.44,232 Main St,Online,Returned,TRK64320429,5,SAVE10,Facebook,586.44
+ORD200053,2024-05-18,C67551,Phone,4,488.78,512 Main St,Online,Returned,TRK94992552,5,FREESHIP,Google,1955.12
+ORD200054,2025-03-27,C48120,Chair,1,280.25,623 Main St,Online,Pending,TRK11014449,5,WINTER15,Email,280.25
+ORD200055,2025-06-24,C95984,Printer,3,344.4,565 Main St,Online,Cancelled,TRK67434829,3,,Facebook,1033.2
+ORD200056,2023-05-21,C54298,Tablet,3,479.21,566 Main St,Cash,Cancelled,TRK62902341,5,WINTER15,Referral,1437.63
+ORD200057,2023-01-22,C88036,Printer,5,314.27,842 Main St,Cash,Returned,TRK52470128,6,SAVE10,Instagram,1571.35
+ORD200058,2023-01-15,C60190,Phone,4,474.69,202 Main St,Gift Card,Cancelled,TRK70857868,6,SAVE10,Google,1898.76
+ORD200059,2024-09-11,C97603,Chair,4,593.27,811 Main St,Online,Shipped,TRK47055028,5,,Facebook,2373.08
+ORD200060,2024-08-21,C39256,Desk,1,417.1,634 Main St,Debit Card,Returned,TRK23412025,3,FREESHIP,Referral,417.1
+ORD200061,2024-03-24,C61618,Desk,4,122.2,104 Main St,Cash,Delivered,TRK43458485,7,FREESHIP,Facebook,488.8
+ORD200062,2023-08-22,C36497,Desk,2,43.15,691 Main St,Debit Card,Pending,TRK12102911,3,WINTER15,Email,86.3
+ORD200063,2025-02-02,C96695,Chair,1,564.86,813 Main St,Debit Card,Shipped,TRK64283851,6,WINTER15,Referral,564.86
+ORD200064,2025-06-25,C49720,Printer,3,130.61,752 Main St,Debit Card,Cancelled,TRK55785217,4,FREESHIP,Facebook,391.83
+ORD200065,2023-12-30,C97735,Monitor,5,81.7,385 Main St,Credit Card,Delivered,TRK13743703,6,,Instagram,408.5
+ORD200066,2024-11-15,C18104,Chair,5,127.18,715 Main St,Cash,Cancelled,TRK15488568,9,SAVE10,Referral,635.9
+ORD200067,2024-12-09,C25587,Printer,4,12.1,440 Main St,Debit Card,Cancelled,TRK55105323,8,,Google,48.4
+ORD200068,2023-12-11,C41598,Chair,3,490.92,709 Main St,Credit Card,Pending,TRK81665940,5,FREESHIP,Email,1472.76
+ORD200069,2023-05-11,C43338,Monitor,3,478.65,552 Main St,Online,Shipped,TRK35241775,4,,Referral,1435.95
+ORD200070,2023-05-26,C25123,Desk,1,629.21,384 Main St,Gift Card,Pending,TRK27812282,2,FREESHIP,Instagram,629.21
+ORD200071,2025-06-10,C37454,Monitor,3,434.45,923 Main St,Credit Card,Pending,TRK28252730,4,,Referral,1303.35
+ORD200072,2024-12-22,C19451,Tablet,4,589.44,942 Main St,Gift Card,Returned,TRK87787793,5,,Facebook,2357.76
+ORD200073,2023-05-03,C17269,Monitor,4,433.45,129 Main St,Gift Card,Cancelled,TRK79608389,4,,Facebook,1733.8
+ORD200074,2023-06-24,C25382,Phone,5,90.87,622 Main St,Cash,Pending,TRK64691287,5,,Instagram,454.35
+ORD200075,2023-09-26,C80651,Tablet,3,398.17,917 Main St,Debit Card,Delivered,TRK14846720,5,SAVE10,Email,1194.51
+ORD200076,2024-03-31,C58638,Laptop,4,382.88,239 Main St,Cash,Cancelled,TRK38224871,6,WINTER15,Email,1531.52
+ORD200077,2024-05-24,C50121,Phone,1,583.18,348 Main St,Credit Card,Returned,TRK79810059,5,,Google,583.18
+ORD200078,2024-08-06,C32029,Printer,4,175.36,146 Main St,Debit Card,Delivered,TRK68535532,4,FREESHIP,Instagram,701.44
+ORD200079,2025-03-10,C76700,Tablet,2,311.91,103 Main St,Online,Shipped,TRK13036341,2,,Facebook,623.82
+ORD200080,2023-06-27,C29041,Phone,3,589.56,591 Main St,Online,Returned,TRK28840655,6,,Facebook,1768.68
+ORD200081,2023-06-08,C29314,Monitor,2,394.3,496 Main St,Cash,Shipped,TRK59876213,6,FREESHIP,Email,788.6
+ORD200082,2024-01-05,C65799,Tablet,4,565.2,971 Main St,Debit Card,Shipped,TRK66906607,9,SAVE10,Google,2260.8
+ORD200083,2023-08-22,C15681,Laptop,4,540.41,989 Main St,Credit Card,Cancelled,TRK75112172,6,,Referral,2161.64
+ORD200084,2023-08-28,C64160,Monitor,2,165.49,967 Main St,Online,Shipped,TRK34121529,4,WINTER15,Instagram,330.98
+ORD200085,2024-09-09,C14553,Tablet,3,146.73,768 Main St,Cash,Delivered,TRK93538334,8,FREESHIP,Email,440.19
+ORD200086,2024-06-19,C88205,Printer,5,643.03,447 Main St,Online,Cancelled,TRK93504166,5,FREESHIP,Referral,3215.15
+ORD200087,2024-10-10,C91245,Tablet,3,225.11,915 Main St,Cash,Shipped,TRK46976391,4,SAVE10,Facebook,675.33
+ORD200088,2025-06-05,C75439,Desk,3,114.81,318 Main St,Gift Card,Cancelled,TRK19831653,7,,Google,344.43
+ORD200089,2025-02-25,C17181,Printer,5,455.33,291 Main St,Credit Card,Cancelled,TRK78912978,8,FREESHIP,Google,2276.65
+ORD200090,2023-09-18,C36540,Chair,4,182.08,611 Main St,Gift Card,Delivered,TRK35828122,4,SAVE10,Email,728.32
+ORD200091,2023-03-15,C98216,Laptop,5,492.75,196 Main St,Cash,Shipped,TRK40986666,6,WINTER15,Referral,2463.75
+ORD200092,2024-06-10,C29568,Printer,4,48.61,203 Main St,Online,Shipped,TRK46531075,7,FREESHIP,Facebook,194.44
+ORD200093,2023-01-14,C97262,Desk,4,431.01,837 Main St,Credit Card,Returned,TRK65990229,7,,Referral,1724.04
+ORD200094,2023-02-11,C79821,Chair,1,531.18,781 Main St,Gift Card,Returned,TRK12780193,6,WINTER15,Instagram,531.18
+ORD200095,2023-03-24,C76761,Printer,4,117.51,839 Main St,Debit Card,Returned,TRK60179774,7,,Referral,470.04
+ORD200096,2024-06-01,C93007,Phone,2,232.83,103 Main St,Gift Card,Delivered,TRK85696091,7,,Instagram,465.66
+ORD200097,2025-01-21,C15624,Tablet,5,619.52,922 Main St,Debit Card,Pending,TRK40621141,9,,Email,3097.6
+ORD200098,2023-01-14,C70921,Printer,2,228.54,533 Main St,Debit Card,Pending,TRK54983109,3,,Email,457.08
+ORD200099,2025-04-12,C30477,Printer,1,201.58,717 Main St,Debit Card,Cancelled,TRK51829648,2,WINTER15,Email,201.58
+ORD200100,2023-02-17,C74866,Phone,3,664.79,743 Main St,Online,Delivered,TRK53783265,6,,Facebook,1994.37
+ORD200101,2023-11-25,C15283,Printer,1,381.02,152 Main St,Cash,Shipped,TRK19286291,6,,Google,381.02
+ORD200102,2023-03-08,C18037,Laptop,2,70.34,944 Main St,Gift Card,Cancelled,TRK47362236,3,FREESHIP,Email,140.68
+ORD200103,2025-01-25,C62656,Phone,4,218.43,514 Main St,Credit Card,Cancelled,TRK86296459,9,SAVE10,Email,873.72
+ORD200104,2024-07-30,C65744,Phone,1,582.04,647 Main St,Gift Card,Delivered,TRK39906058,1,FREESHIP,Email,582.04
+ORD200105,2024-10-24,C72290,Printer,3,185.4,810 Main St,Gift Card,Cancelled,TRK68792129,7,,Facebook,556.2
+ORD200106,2023-09-08,C73514,Desk,3,465.05,126 Main St,Credit Card,Cancelled,TRK96777924,3,SAVE10,Email,1395.15
+ORD200107,2023-03-27,C16775,Printer,5,670.75,848 Main St,Gift Card,Shipped,TRK34392124,8,FREESHIP,Instagram,3353.75
+ORD200108,2024-12-28,C33099,Laptop,5,48.38,522 Main St,Gift Card,Delivered,TRK28522330,9,WINTER15,Email,241.9
+ORD200109,2023-09-17,C51157,Desk,3,592.87,131 Main St,Gift Card,Shipped,TRK18674578,3,FREESHIP,Referral,1778.61
+ORD200110,2024-04-21,C74562,Tablet,1,220.77,388 Main St,Gift Card,Pending,TRK32062079,5,FREESHIP,Instagram,220.77
+ORD200111,2025-05-07,C95271,Desk,3,309.22,620 Main St,Online,Cancelled,TRK74904969,7,FREESHIP,Google,927.66
+ORD200112,2023-01-01,C81366,Monitor,1,410.6,423 Main St,Online,Cancelled,TRK17062206,2,WINTER15,Referral,410.6
+ORD200113,2024-01-17,C65905,Laptop,5,190.08,605 Main St,Cash,Shipped,TRK73954365,9,FREESHIP,Instagram,950.4
+ORD200114,2025-01-27,C77272,Monitor,5,498.48,115 Main St,Online,Pending,TRK29708128,8,SAVE10,Google,2492.4
+ORD200115,2023-11-27,C32580,Phone,5,374.99,122 Main St,Online,Shipped,TRK23670394,9,SAVE10,Facebook,1874.95
+ORD200116,2023-03-19,C47761,Printer,4,291.35,109 Main St,Credit Card,Cancelled,TRK66669207,6,WINTER15,Facebook,1165.4
+ORD200117,2023-03-08,C49187,Tablet,1,535.5,593 Main St,Gift Card,Cancelled,TRK81888598,5,WINTER15,Referral,535.5
+ORD200118,2023-10-09,C27898,Printer,5,502.71,807 Main St,Gift Card,Shipped,TRK61957665,7,FREESHIP,Google,2513.55
+ORD200119,2025-06-11,C14683,Desk,2,534.67,187 Main St,Debit Card,Shipped,TRK47373682,7,FREESHIP,Referral,1069.34
+ORD200120,2023-04-11,C58108,Tablet,4,629.34,986 Main St,Cash,Cancelled,TRK66218053,4,WINTER15,Instagram,2517.36
+ORD200121,2023-11-30,C89822,Desk,1,410.78,673 Main St,Cash,Cancelled,TRK24138598,1,FREESHIP,Instagram,410.78
+ORD200122,2024-04-15,C96787,Laptop,2,533.02,588 Main St,Gift Card,Shipped,TRK30422853,2,,Facebook,1066.04
+ORD200123,2023-07-06,C86064,Desk,3,278.04,727 Main St,Online,Delivered,TRK62182901,5,,Instagram,834.12
+ORD200124,2024-07-28,C97148,Printer,4,283.79,563 Main St,Online,Pending,TRK85321126,8,,Google,1135.16
+ORD200125,2024-11-06,C91099,Phone,2,512.65,758 Main St,Credit Card,Shipped,TRK81846174,5,SAVE10,Email,1025.3
+ORD200126,2025-05-03,C55606,Desk,4,275.5,353 Main St,Gift Card,Shipped,TRK68250319,8,FREESHIP,Google,1102
+ORD200127,2023-08-10,C71486,Desk,3,469.32,365 Main St,Debit Card,Shipped,TRK73929833,3,,Google,1407.96
+ORD200128,2023-02-17,C86408,Tablet,4,21.07,244 Main St,Gift Card,Delivered,TRK41432648,4,FREESHIP,Google,84.28
+ORD200129,2023-10-27,C52751,Laptop,4,263.93,427 Main St,Debit Card,Shipped,TRK72481234,4,FREESHIP,Facebook,1055.72
+ORD200130,2025-01-22,C29059,Desk,3,501.3,513 Main St,Online,Cancelled,TRK88360704,3,WINTER15,Facebook,1503.9
+ORD200131,2023-01-08,C72862,Tablet,1,84.8,606 Main St,Gift Card,Pending,TRK51648833,5,,Instagram,84.8
+ORD200132,2023-03-28,C96257,Tablet,4,450.75,583 Main St,Credit Card,Shipped,TRK13137948,6,WINTER15,Email,1803
+ORD200133,2025-06-20,C87432,Chair,4,302.05,636 Main St,Debit Card,Cancelled,TRK68969625,6,SAVE10,Google,1208.2
+ORD200134,2025-06-23,C16253,Laptop,2,199.7,583 Main St,Cash,Pending,TRK17354894,4,,Email,399.4
+ORD200135,2023-08-04,C79909,Printer,2,68.81,642 Main St,Gift Card,Shipped,TRK86742257,5,SAVE10,Referral,137.62
+ORD200136,2024-04-27,C73370,Laptop,1,44.35,595 Main St,Gift Card,Cancelled,TRK67820278,1,SAVE10,Instagram,44.35
+ORD200137,2024-11-26,C50682,Monitor,2,250.98,598 Main St,Credit Card,Delivered,TRK12242337,5,,Google,501.96
+ORD200138,2023-12-21,C21905,Tablet,1,298.06,478 Main St,Debit Card,Pending,TRK31863841,3,WINTER15,Google,298.06
+ORD200139,2023-04-10,C61440,Phone,1,583.9,714 Main St,Cash,Returned,TRK33114521,1,,Email,583.9
+ORD200140,2025-05-31,C33110,Chair,3,528.14,388 Main St,Online,Delivered,TRK38624225,3,FREESHIP,Email,1584.42
+ORD200141,2023-11-18,C80004,Printer,3,684.14,151 Main St,Cash,Cancelled,TRK66230753,3,WINTER15,Instagram,2052.42
+ORD200142,2023-09-06,C86374,Desk,5,272.77,573 Main St,Cash,Pending,TRK79451491,7,WINTER15,Email,1363.85
+ORD200143,2024-06-13,C66521,Chair,4,400.07,933 Main St,Online,Shipped,TRK34654244,5,,Referral,1600.28
+ORD200144,2023-08-04,C63365,Desk,5,219.78,895 Main St,Credit Card,Pending,TRK80100887,8,,Facebook,1098.9
+ORD200145,2024-03-02,C85929,Printer,3,146.91,798 Main St,Credit Card,Delivered,TRK29318610,6,FREESHIP,Google,440.73
+ORD200146,2025-04-30,C84645,Tablet,2,411.49,404 Main St,Credit Card,Returned,TRK68893369,4,,Instagram,822.98
+ORD200147,2025-05-06,C46316,Laptop,2,465.18,893 Main St,Credit Card,Cancelled,TRK16196000,2,SAVE10,Google,930.36
+ORD200148,2024-12-15,C35100,Phone,2,319.91,139 Main St,Credit Card,Cancelled,TRK56853491,3,WINTER15,Google,639.82
+ORD200149,2023-12-27,C39671,Laptop,1,217.56,174 Main St,Debit Card,Delivered,TRK47153818,3,,Facebook,217.56
+ORD200150,2023-12-13,C25503,Phone,2,105.57,981 Main St,Debit Card,Returned,TRK29878837,5,WINTER15,Google,211.14
+ORD200151,2023-12-01,C32960,Printer,5,444.76,947 Main St,Debit Card,Returned,TRK91226500,7,,Email,2223.8
+ORD200152,2025-01-02,C77736,Chair,2,399.04,659 Main St,Cash,Cancelled,TRK90329250,3,FREESHIP,Referral,798.08
+ORD200153,2024-12-18,C71570,Chair,4,534.48,437 Main St,Online,Returned,TRK95992269,9,WINTER15,Instagram,2137.92
+ORD200154,2023-07-20,C73587,Phone,4,408.21,727 Main St,Credit Card,Pending,TRK13955543,9,,Instagram,1632.84
+ORD200155,2023-02-27,C62740,Phone,1,424.4,446 Main St,Online,Shipped,TRK20706408,6,WINTER15,Referral,424.4
+ORD200156,2024-11-08,C58808,Chair,2,269.83,651 Main St,Online,Delivered,TRK24451893,4,SAVE10,Email,539.66
+ORD200157,2025-02-21,C50422,Monitor,2,564.58,636 Main St,Online,Returned,TRK71227815,4,WINTER15,Facebook,1129.16
+ORD200158,2024-05-16,C23334,Tablet,1,331.06,737 Main St,Credit Card,Pending,TRK46335144,5,WINTER15,Instagram,331.06
+ORD200159,2023-10-31,C48965,Printer,1,299.35,819 Main St,Credit Card,Cancelled,TRK50921780,5,WINTER15,Email,299.35
+ORD200160,2023-02-17,C38669,Monitor,4,101.32,240 Main St,Cash,Pending,TRK81738254,7,,Referral,405.28
+ORD200161,2024-03-29,C35091,Monitor,1,211.14,513 Main St,Credit Card,Cancelled,TRK53784452,1,SAVE10,Facebook,211.14
+ORD200162,2023-07-27,C82313,Chair,3,65.86,917 Main St,Online,Pending,TRK79854624,8,WINTER15,Google,197.58
+ORD200163,2025-06-24,C99589,Tablet,1,641.39,277 Main St,Online,Cancelled,TRK16695001,1,,Referral,641.39
+ORD200164,2023-12-28,C70566,Desk,5,536.58,667 Main St,Gift Card,Pending,TRK49673411,5,SAVE10,Google,2682.9
+ORD200165,2024-09-14,C60355,Monitor,2,500.29,226 Main St,Online,Returned,TRK30155194,7,WINTER15,Google,1000.58
+ORD200166,2025-03-04,C28889,Chair,3,86.29,565 Main St,Cash,Delivered,TRK23791726,6,WINTER15,Instagram,258.87
+ORD200167,2023-05-27,C88304,Chair,2,384.14,219 Main St,Online,Returned,TRK44268941,2,WINTER15,Email,768.28
+ORD200168,2025-01-04,C49517,Printer,1,594.96,878 Main St,Cash,Returned,TRK78551375,6,,Facebook,594.96
+ORD200169,2024-04-07,C35785,Printer,1,427.82,732 Main St,Online,Delivered,TRK78923089,2,WINTER15,Email,427.82
+ORD200170,2025-04-04,C80223,Desk,4,662.94,535 Main St,Cash,Cancelled,TRK68632951,8,SAVE10,Instagram,2651.76
+ORD200171,2023-08-15,C20448,Tablet,2,148.22,336 Main St,Credit Card,Delivered,TRK67379895,7,WINTER15,Instagram,296.44
+ORD200172,2025-04-06,C34134,Printer,1,254.12,365 Main St,Online,Delivered,TRK43074303,1,WINTER15,Email,254.12
+ORD200173,2024-03-24,C95901,Phone,3,664.46,806 Main St,Online,Delivered,TRK56989066,4,FREESHIP,Google,1993.38
+ORD200174,2024-04-16,C51145,Printer,4,600.81,790 Main St,Debit Card,Delivered,TRK59154274,9,SAVE10,Email,2403.24
+ORD200175,2025-02-08,C78170,Chair,5,68.34,332 Main St,Debit Card,Pending,TRK71410605,6,WINTER15,Referral,341.7
+ORD200176,2025-06-28,C80151,Tablet,4,430.83,553 Main St,Gift Card,Pending,TRK88251529,8,WINTER15,Referral,1723.32
+ORD200177,2023-08-05,C55632,Chair,5,431.69,354 Main St,Credit Card,Pending,TRK13003066,10,,Facebook,2158.45
+ORD200178,2024-04-11,C53070,Chair,4,512.06,283 Main St,Online,Delivered,TRK49791755,5,SAVE10,Google,2048.24
+ORD200179,2024-11-24,C27401,Laptop,3,539.91,500 Main St,Credit Card,Delivered,TRK14332053,8,,Email,1619.73
+ORD200180,2023-03-18,C87216,Tablet,5,316.07,970 Main St,Cash,Returned,TRK18713727,10,,Google,1580.35
+ORD200181,2024-08-31,C38966,Printer,5,404.39,247 Main St,Online,Shipped,TRK17205146,10,,Referral,2021.95
+ORD200182,2025-03-19,C16612,Desk,1,600.54,596 Main St,Debit Card,Pending,TRK96188223,4,WINTER15,Google,600.54
+ORD200183,2024-04-18,C39246,Monitor,5,186.28,258 Main St,Debit Card,Delivered,TRK16658182,8,SAVE10,Email,931.4
+ORD200184,2024-04-04,C65180,Tablet,4,214.54,231 Main St,Gift Card,Cancelled,TRK39255469,7,,Referral,858.16
+ORD200185,2025-02-02,C46877,Laptop,1,210.7,572 Main St,Online,Shipped,TRK96935978,2,WINTER15,Referral,210.7
+ORD200186,2023-12-07,C30334,Phone,2,133.55,322 Main St,Cash,Pending,TRK66388885,7,FREESHIP,Facebook,267.1
+ORD200187,2023-02-08,C21227,Chair,1,590.87,689 Main St,Gift Card,Returned,TRK79129657,6,FREESHIP,Referral,590.87
+ORD200188,2025-03-15,C97715,Chair,2,363.91,927 Main St,Gift Card,Shipped,TRK19515949,2,FREESHIP,Referral,727.82
+ORD200189,2023-07-05,C48939,Printer,5,429.45,597 Main St,Gift Card,Cancelled,TRK62786764,5,WINTER15,Email,2147.25
+ORD200190,2024-08-31,C35483,Printer,3,223.7,725 Main St,Cash,Returned,TRK79638203,3,SAVE10,Email,671.1
+ORD200191,2025-03-08,C51494,Laptop,2,488.87,505 Main St,Online,Cancelled,TRK58520306,4,FREESHIP,Google,977.74
+ORD200192,2023-08-11,C58410,Desk,1,645.46,151 Main St,Gift Card,Cancelled,TRK19749672,5,SAVE10,Google,645.46
+ORD200193,2023-07-21,C11644,Printer,1,46.66,429 Main St,Cash,Cancelled,TRK81320339,6,,Google,46.66
+ORD200194,2024-06-08,C53501,Monitor,1,249.57,899 Main St,Cash,Shipped,TRK90144892,3,FREESHIP,Google,249.57
+ORD200195,2024-04-22,C63619,Chair,3,619.21,801 Main St,Debit Card,Cancelled,TRK65385674,6,,Email,1857.63
+ORD200196,2025-01-24,C40882,Desk,4,217.13,719 Main St,Cash,Delivered,TRK64165503,8,WINTER15,Email,868.52
+ORD200197,2023-08-27,C80135,Laptop,5,221.51,723 Main St,Cash,Returned,TRK95222269,5,WINTER15,Referral,1107.55
+ORD200198,2024-06-11,C37594,Laptop,4,340.3,926 Main St,Cash,Cancelled,TRK94405162,8,SAVE10,Referral,1361.2
+ORD200199,2025-01-23,C87524,Phone,1,625,358 Main St,Online,Returned,TRK21114341,5,WINTER15,Google,625
+ORD200200,2025-06-07,C97681,Tablet,5,433.26,895 Main St,Credit Card,Delivered,TRK37531040,9,SAVE10,Google,2166.3
+ORD200201,2023-06-18,C10126,Monitor,2,674.9,146 Main St,Online,Shipped,TRK75607531,4,SAVE10,Facebook,1349.8
+ORD200202,2025-02-06,C36938,Monitor,3,253.98,636 Main St,Credit Card,Cancelled,TRK52522904,3,FREESHIP,Email,761.94
+ORD200203,2025-01-21,C99173,Printer,3,356.84,172 Main St,Online,Shipped,TRK89849342,5,SAVE10,Instagram,1070.52
+ORD200204,2023-09-05,C99775,Laptop,4,413.71,478 Main St,Gift Card,Cancelled,TRK21638425,9,FREESHIP,Facebook,1654.84
+ORD200205,2023-03-04,C19266,Desk,3,147.39,609 Main St,Debit Card,Returned,TRK58357269,3,,Email,442.17
+ORD200206,2024-04-16,C31072,Laptop,4,229.1,729 Main St,Gift Card,Returned,TRK77172975,8,WINTER15,Email,916.4
+ORD200207,2025-03-18,C54595,Phone,1,121.96,999 Main St,Debit Card,Delivered,TRK44416659,3,,Google,121.96
+ORD200208,2024-10-08,C87777,Desk,2,408.32,597 Main St,Online,Shipped,TRK29003608,3,FREESHIP,Facebook,816.64
+ORD200209,2023-08-29,C35854,Tablet,5,187.97,706 Main St,Cash,Returned,TRK30615168,9,SAVE10,Google,939.85
+ORD200210,2024-12-05,C93821,Chair,3,358.48,513 Main St,Gift Card,Delivered,TRK10658539,7,FREESHIP,Facebook,1075.44
+ORD200211,2025-01-03,C54390,Printer,3,193.58,185 Main St,Gift Card,Pending,TRK83853742,7,FREESHIP,Email,580.74
+ORD200212,2023-06-20,C53215,Monitor,1,265.38,367 Main St,Credit Card,Cancelled,TRK34751835,6,WINTER15,Email,265.38
+ORD200213,2023-04-20,C71122,Laptop,1,634.4,317 Main St,Cash,Cancelled,TRK54757882,6,SAVE10,Email,634.4
+ORD200214,2024-08-21,C29483,Desk,4,305.72,673 Main St,Online,Delivered,TRK89423603,5,,Facebook,1222.88
+ORD200215,2023-08-10,C26767,Printer,1,303.6,432 Main St,Cash,Shipped,TRK24585307,5,FREESHIP,Facebook,303.6
+ORD200216,2025-04-15,C70492,Monitor,4,496,811 Main St,Online,Cancelled,TRK84625405,8,WINTER15,Google,1984
+ORD200217,2024-05-20,C61549,Desk,4,321.51,908 Main St,Cash,Returned,TRK65596914,9,,Google,1286.04
+ORD200218,2023-04-28,C11665,Tablet,3,112.46,882 Main St,Gift Card,Shipped,TRK10993930,6,SAVE10,Instagram,337.38
+ORD200219,2025-05-02,C48946,Laptop,5,61.97,457 Main St,Cash,Delivered,TRK99387220,6,SAVE10,Email,309.85
+ORD200220,2023-07-18,C79506,Laptop,2,373.17,497 Main St,Credit Card,Pending,TRK95188748,6,SAVE10,Referral,746.34
+ORD200221,2024-02-23,C93473,Tablet,5,639.37,552 Main St,Debit Card,Pending,TRK50003989,6,SAVE10,Google,3196.85
+ORD200222,2023-05-04,C43124,Chair,4,693.36,931 Main St,Online,Shipped,TRK17293348,8,,Instagram,2773.44
+ORD200223,2024-09-11,C22783,Phone,4,692.91,673 Main St,Credit Card,Pending,TRK55009149,9,SAVE10,Instagram,2771.64
+ORD200224,2023-09-23,C18567,Printer,4,91.46,507 Main St,Cash,Cancelled,TRK17554673,9,SAVE10,Referral,365.84
+ORD200225,2024-03-13,C99879,Phone,3,273.96,692 Main St,Debit Card,Returned,TRK50246700,8,SAVE10,Google,821.88
+ORD200226,2025-06-27,C31501,Desk,3,588.05,242 Main St,Gift Card,Delivered,TRK93063929,8,,Instagram,1764.15
+ORD200227,2023-11-02,C93220,Monitor,2,365.17,353 Main St,Online,Cancelled,TRK89023251,4,FREESHIP,Facebook,730.34
+ORD200228,2023-05-17,C57867,Chair,4,385.92,579 Main St,Credit Card,Cancelled,TRK92055007,8,,Instagram,1543.68
+ORD200229,2025-03-28,C62622,Tablet,1,562.61,762 Main St,Credit Card,Delivered,TRK70997648,3,WINTER15,Facebook,562.61
+ORD200230,2023-12-16,C94595,Desk,4,61.91,948 Main St,Gift Card,Delivered,TRK24497305,6,WINTER15,Email,247.64
+ORD200231,2023-11-05,C30955,Phone,4,41.9,327 Main St,Gift Card,Pending,TRK46898848,9,FREESHIP,Instagram,167.6
+ORD200232,2023-05-19,C20731,Printer,4,444.44,610 Main St,Debit Card,Cancelled,TRK75568437,8,WINTER15,Google,1777.76
+ORD200233,2024-08-24,C30168,Phone,3,311.33,146 Main St,Cash,Cancelled,TRK73699939,3,WINTER15,Instagram,933.99
+ORD200234,2024-11-26,C79842,Printer,4,236.41,337 Main St,Debit Card,Pending,TRK26957950,7,SAVE10,Google,945.64
+ORD200235,2023-02-20,C32854,Desk,1,65.45,815 Main St,Cash,Pending,TRK30009218,2,WINTER15,Google,65.45
+ORD200236,2023-01-01,C14847,Monitor,1,318.81,562 Main St,Debit Card,Pending,TRK39663243,3,WINTER15,Email,318.81
+ORD200237,2024-03-14,C88645,Monitor,3,583.72,783 Main St,Credit Card,Shipped,TRK74097570,5,FREESHIP,Facebook,1751.16
+ORD200238,2024-12-13,C66149,Desk,4,384.32,770 Main St,Credit Card,Pending,TRK76307307,6,WINTER15,Google,1537.28
+ORD200239,2024-12-11,C20256,Tablet,3,538.74,456 Main St,Online,Shipped,TRK71127943,6,FREESHIP,Email,1616.22
+ORD200240,2023-07-12,C14983,Tablet,1,17.24,255 Main St,Online,Pending,TRK93444157,2,FREESHIP,Instagram,17.24
+ORD200241,2023-05-16,C20817,Chair,5,615.67,407 Main St,Online,Pending,TRK44164590,6,SAVE10,Email,3078.35
+ORD200242,2023-05-09,C94921,Printer,2,219.1,134 Main St,Online,Pending,TRK97794327,4,SAVE10,Referral,438.2
+ORD200243,2025-05-09,C54725,Chair,2,144.66,506 Main St,Online,Cancelled,TRK30601940,7,FREESHIP,Google,289.32
+ORD200244,2023-02-16,C98096,Desk,2,317.77,838 Main St,Debit Card,Cancelled,TRK51518631,4,WINTER15,Facebook,635.54
+ORD200245,2025-04-20,C12667,Laptop,1,223.3,306 Main St,Online,Returned,TRK25390491,1,,Facebook,223.3
+ORD200246,2024-08-30,C55354,Desk,2,342.11,164 Main St,Gift Card,Shipped,TRK15439493,2,WINTER15,Instagram,684.22
+ORD200247,2023-07-20,C14600,Printer,2,220.9,785 Main St,Gift Card,Shipped,TRK84984764,4,,Email,441.8
+ORD200248,2023-07-02,C97187,Laptop,1,670.54,471 Main St,Cash,Shipped,TRK62283713,6,FREESHIP,Referral,670.54
+ORD200249,2024-02-07,C39106,Printer,1,546.19,245 Main St,Cash,Pending,TRK35464433,5,FREESHIP,Referral,546.19
+ORD200250,2023-04-05,C93379,Desk,3,42.95,318 Main St,Gift Card,Returned,TRK67954150,8,SAVE10,Email,128.85
+ORD200251,2025-05-15,C93175,Monitor,4,14.69,814 Main St,Cash,Cancelled,TRK32995144,9,,Email,58.76
+ORD200252,2024-09-20,C19648,Phone,4,668.36,821 Main St,Gift Card,Cancelled,TRK51297879,5,FREESHIP,Facebook,2673.44
+ORD200253,2024-03-23,C14891,Chair,4,413.74,743 Main St,Gift Card,Returned,TRK79471534,7,FREESHIP,Instagram,1654.96
+ORD200254,2023-12-26,C10866,Monitor,3,263.19,770 Main St,Online,Delivered,TRK34809583,5,,Instagram,789.57
+ORD200255,2024-05-13,C47283,Monitor,1,263.96,806 Main St,Gift Card,Returned,TRK56235117,2,SAVE10,Google,263.96
+ORD200256,2025-06-30,C94323,Chair,5,75.81,463 Main St,Gift Card,Returned,TRK22663277,10,WINTER15,Instagram,379.05
+ORD200257,2024-04-23,C89732,Phone,1,406.22,712 Main St,Credit Card,Cancelled,TRK41059233,5,SAVE10,Referral,406.22
+ORD200258,2024-02-26,C87764,Tablet,2,103.41,294 Main St,Online,Shipped,TRK94082469,2,FREESHIP,Referral,206.82
+ORD200259,2023-06-11,C20977,Chair,4,435.12,636 Main St,Credit Card,Delivered,TRK54991561,9,SAVE10,Instagram,1740.48
+ORD200260,2023-05-17,C12245,Monitor,2,407.79,153 Main St,Debit Card,Shipped,TRK22000463,3,,Google,815.58
+ORD200261,2025-05-28,C68976,Phone,5,173.65,460 Main St,Gift Card,Delivered,TRK25491356,9,SAVE10,Email,868.25
+ORD200262,2023-01-10,C69476,Phone,4,249.07,642 Main St,Credit Card,Returned,TRK65869386,5,WINTER15,Referral,996.28
+ORD200263,2023-03-25,C71040,Phone,4,434.85,250 Main St,Credit Card,Pending,TRK41397604,4,WINTER15,Google,1739.4
+ORD200264,2024-08-03,C71035,Tablet,1,436.77,977 Main St,Cash,Returned,TRK19599578,5,FREESHIP,Google,436.77
+ORD200265,2023-12-22,C20752,Printer,1,572.13,150 Main St,Debit Card,Cancelled,TRK22298450,4,SAVE10,Google,572.13
+ORD200266,2024-06-08,C38840,Chair,4,583.07,589 Main St,Credit Card,Cancelled,TRK48484633,6,FREESHIP,Referral,2332.28
+ORD200267,2025-04-17,C84480,Chair,5,468.51,803 Main St,Debit Card,Delivered,TRK62361867,9,,Facebook,2342.55
+ORD200268,2023-08-11,C37032,Phone,2,423.88,655 Main St,Debit Card,Delivered,TRK48639226,7,SAVE10,Referral,847.76
+ORD200269,2023-11-25,C48942,Tablet,4,663.67,129 Main St,Credit Card,Pending,TRK29355120,7,FREESHIP,Google,2654.68
+ORD200270,2023-06-04,C13540,Printer,4,309.91,127 Main St,Debit Card,Shipped,TRK81087373,5,WINTER15,Google,1239.64
+ORD200271,2023-03-28,C59572,Monitor,1,542.07,791 Main St,Cash,Shipped,TRK16792991,6,WINTER15,Referral,542.07
+ORD200272,2023-09-19,C29758,Chair,2,399.32,119 Main St,Online,Pending,TRK12990043,6,WINTER15,Instagram,798.64
+ORD200273,2024-10-27,C11849,Tablet,2,238.25,974 Main St,Online,Cancelled,TRK91195261,7,FREESHIP,Email,476.5
+ORD200274,2023-02-04,C50967,Phone,2,182.4,884 Main St,Gift Card,Cancelled,TRK65300814,5,SAVE10,Referral,364.8
+ORD200275,2023-11-04,C80735,Chair,2,65.07,360 Main St,Credit Card,Cancelled,TRK99880231,4,SAVE10,Google,130.14
+ORD200276,2025-03-29,C99050,Printer,2,600.57,654 Main St,Debit Card,Returned,TRK56927089,3,WINTER15,Instagram,1201.14
+ORD200277,2024-09-09,C11210,Chair,5,90.92,910 Main St,Credit Card,Delivered,TRK44929965,9,SAVE10,Facebook,454.6
+ORD200278,2024-11-18,C46015,Laptop,5,362.46,299 Main St,Cash,Delivered,TRK46598430,6,FREESHIP,Instagram,1812.3
+ORD200279,2023-10-20,C69167,Chair,3,55.01,263 Main St,Online,Pending,TRK12425655,7,WINTER15,Email,165.03
+ORD200280,2023-03-27,C55388,Tablet,3,404.62,740 Main St,Gift Card,Delivered,TRK75741001,6,FREESHIP,Instagram,1213.86
+ORD200281,2023-07-27,C87181,Desk,4,654.79,195 Main St,Cash,Pending,TRK60093390,9,,Referral,2619.16
+ORD200282,2025-04-22,C30411,Printer,4,637.79,375 Main St,Gift Card,Cancelled,TRK71810536,9,FREESHIP,Google,2551.16
+ORD200283,2025-02-28,C39638,Laptop,4,540.33,990 Main St,Cash,Shipped,TRK69745608,6,,Google,2161.32
+ORD200284,2023-02-16,C27203,Laptop,5,208.17,516 Main St,Credit Card,Returned,TRK22023906,6,SAVE10,Facebook,1040.85
+ORD200285,2025-06-10,C67583,Phone,1,338.31,974 Main St,Online,Delivered,TRK93281700,3,,Google,338.31
+ORD200286,2025-04-07,C70554,Monitor,3,139.45,187 Main St,Gift Card,Returned,TRK61086952,8,WINTER15,Google,418.35
+ORD200287,2023-11-24,C70437,Chair,4,655.18,630 Main St,Online,Shipped,TRK26628830,5,,Facebook,2620.72
+ORD200288,2023-03-12,C97643,Laptop,4,512.75,537 Main St,Debit Card,Returned,TRK60831391,8,WINTER15,Google,2051
+ORD200289,2023-07-26,C17136,Chair,4,160.49,333 Main St,Credit Card,Shipped,TRK55362541,8,WINTER15,Referral,641.96
+ORD200290,2023-05-05,C24901,Chair,3,99.9,258 Main St,Cash,Delivered,TRK14029489,8,FREESHIP,Facebook,299.7
+ORD200291,2024-05-12,C61521,Phone,2,345.01,670 Main St,Credit Card,Delivered,TRK93676567,6,FREESHIP,Google,690.02
+ORD200292,2025-01-15,C39639,Monitor,1,65.95,185 Main St,Credit Card,Delivered,TRK31042152,5,,Facebook,65.95
+ORD200293,2023-02-16,C33220,Tablet,4,463.04,564 Main St,Gift Card,Returned,TRK40450219,9,,Instagram,1852.16
+ORD200294,2025-04-01,C65414,Phone,2,297.71,208 Main St,Online,Shipped,TRK67562517,7,SAVE10,Referral,595.42
+ORD200295,2023-01-25,C49009,Printer,5,107.48,278 Main St,Debit Card,Cancelled,TRK46285799,9,FREESHIP,Email,537.4
+ORD200296,2024-06-19,C48453,Desk,5,638.8,434 Main St,Debit Card,Cancelled,TRK52110494,10,WINTER15,Referral,3194
+ORD200297,2023-02-22,C68078,Desk,2,493.88,252 Main St,Credit Card,Returned,TRK64862812,7,SAVE10,Instagram,987.76
+ORD200298,2023-12-19,C19402,Printer,4,301.17,267 Main St,Online,Cancelled,TRK97825212,6,,Email,1204.68
+ORD200299,2024-01-20,C30711,Monitor,1,278.66,856 Main St,Gift Card,Cancelled,TRK42696593,2,FREESHIP,Instagram,278.66
+ORD200300,2024-09-02,C39000,Phone,1,287.46,894 Main St,Debit Card,Returned,TRK33753945,3,FREESHIP,Facebook,287.46
+ORD200301,2023-05-11,C31105,Chair,1,583.99,726 Main St,Cash,Cancelled,TRK40149095,2,SAVE10,Email,583.99
+ORD200302,2023-05-16,C29432,Chair,3,468.74,121 Main St,Cash,Pending,TRK44142517,4,FREESHIP,Instagram,1406.22
+ORD200303,2024-12-07,C48531,Tablet,1,30.54,368 Main St,Debit Card,Returned,TRK95462192,1,,Google,30.54
+ORD200304,2024-10-18,C86762,Monitor,5,408.73,326 Main St,Gift Card,Delivered,TRK75686292,10,FREESHIP,Instagram,2043.65
+ORD200305,2023-11-25,C63822,Laptop,4,126.89,235 Main St,Cash,Pending,TRK59353216,9,FREESHIP,Instagram,507.56
+ORD200306,2024-06-07,C70495,Printer,2,57.07,238 Main St,Debit Card,Returned,TRK65511225,3,SAVE10,Instagram,114.14
+ORD200307,2023-07-01,C92407,Laptop,3,557.41,135 Main St,Online,Delivered,TRK11755610,4,,Email,1672.23
+ORD200308,2023-12-11,C75888,Printer,3,448.9,790 Main St,Debit Card,Returned,TRK98467398,7,SAVE10,Instagram,1346.7
+ORD200309,2023-10-03,C63153,Chair,4,549.76,625 Main St,Debit Card,Delivered,TRK38033305,4,FREESHIP,Facebook,2199.04
+ORD200310,2024-02-24,C85863,Printer,3,132.48,968 Main St,Online,Shipped,TRK16094218,4,,Referral,397.44
+ORD200311,2025-05-17,C71698,Desk,5,489.37,274 Main St,Online,Returned,TRK34786818,8,,Instagram,2446.85
+ORD200312,2025-05-24,C35397,Printer,5,66.31,579 Main St,Gift Card,Pending,TRK64742535,7,FREESHIP,Referral,331.55
+ORD200313,2023-07-09,C67687,Chair,2,434.3,978 Main St,Cash,Delivered,TRK22838735,7,SAVE10,Instagram,868.6
+ORD200314,2023-10-04,C29931,Desk,4,153.09,540 Main St,Online,Delivered,TRK48712417,4,FREESHIP,Referral,612.36
+ORD200315,2025-05-12,C59139,Tablet,5,91.67,301 Main St,Online,Cancelled,TRK45507090,9,FREESHIP,Email,458.35
+ORD200316,2023-10-02,C66078,Desk,4,275.28,101 Main St,Gift Card,Shipped,TRK86474559,9,WINTER15,Facebook,1101.12
+ORD200317,2023-04-10,C88370,Monitor,2,139.95,339 Main St,Online,Returned,TRK22575151,5,,Instagram,279.9
+ORD200318,2024-07-27,C93375,Chair,3,148.72,317 Main St,Debit Card,Cancelled,TRK95706967,7,SAVE10,Google,446.16
+ORD200319,2023-12-02,C53049,Laptop,2,563.06,413 Main St,Cash,Returned,TRK48974907,6,,Instagram,1126.12
+ORD200320,2024-12-19,C55590,Printer,1,625.51,772 Main St,Credit Card,Shipped,TRK48792951,1,FREESHIP,Facebook,625.51
+ORD200321,2023-08-09,C47086,Phone,4,152.29,135 Main St,Debit Card,Cancelled,TRK44194358,6,WINTER15,Google,609.16
+ORD200322,2024-06-14,C48646,Phone,5,231.82,339 Main St,Debit Card,Delivered,TRK18233748,6,SAVE10,Facebook,1159.1
+ORD200323,2025-01-26,C29416,Laptop,1,150.17,414 Main St,Debit Card,Returned,TRK63820842,1,SAVE10,Referral,150.17
+ORD200324,2024-06-13,C13525,Tablet,3,70.93,847 Main St,Debit Card,Returned,TRK70193221,5,,Referral,212.79
+ORD200325,2023-06-29,C53545,Desk,3,361.39,665 Main St,Credit Card,Shipped,TRK61123177,8,,Referral,1084.17
+ORD200326,2024-07-01,C65986,Laptop,5,670.48,273 Main St,Gift Card,Returned,TRK98353867,5,SAVE10,Facebook,3352.4
+ORD200327,2023-07-25,C17302,Phone,1,359.99,385 Main St,Gift Card,Cancelled,TRK43940016,5,SAVE10,Email,359.99
+ORD200328,2023-02-28,C18404,Tablet,5,674.04,546 Main St,Online,Cancelled,TRK89401624,7,SAVE10,Google,3370.2
+ORD200329,2024-12-25,C88371,Chair,4,283.16,306 Main St,Credit Card,Shipped,TRK63224811,6,,Google,1132.64
+ORD200330,2024-06-02,C38068,Desk,5,260.53,532 Main St,Gift Card,Pending,TRK54059198,5,SAVE10,Instagram,1302.65
+ORD200331,2023-04-15,C78724,Printer,3,422.13,187 Main St,Online,Delivered,TRK25703134,7,SAVE10,Facebook,1266.39
+ORD200332,2024-07-03,C26163,Desk,5,125.02,607 Main St,Debit Card,Pending,TRK67499316,9,SAVE10,Google,625.1
+ORD200333,2024-04-16,C87124,Phone,1,198.51,818 Main St,Credit Card,Returned,TRK52086740,5,WINTER15,Instagram,198.51
+ORD200334,2024-03-26,C90348,Chair,4,224.75,728 Main St,Online,Delivered,TRK20635777,7,WINTER15,Facebook,899
+ORD200335,2025-03-03,C58721,Tablet,3,205.86,978 Main St,Gift Card,Shipped,TRK34801199,4,,Email,617.58
+ORD200336,2023-12-29,C88174,Laptop,1,18.2,441 Main St,Debit Card,Pending,TRK10143345,4,SAVE10,Instagram,18.2
+ORD200337,2023-05-29,C77763,Tablet,3,502.77,599 Main St,Debit Card,Returned,TRK66980447,8,WINTER15,Email,1508.31
+ORD200338,2023-11-08,C53627,Phone,5,305.49,704 Main St,Debit Card,Shipped,TRK64112352,10,,Referral,1527.45
+ORD200339,2024-04-10,C84563,Printer,2,236.33,398 Main St,Online,Pending,TRK62422797,3,SAVE10,Instagram,472.66
+ORD200340,2023-04-23,C76207,Laptop,5,521.25,826 Main St,Cash,Cancelled,TRK25569378,8,,Email,2606.25
+ORD200341,2024-09-23,C94671,Tablet,1,167.15,293 Main St,Gift Card,Shipped,TRK61357272,5,WINTER15,Email,167.15
+ORD200342,2025-06-24,C69994,Monitor,5,466.42,619 Main St,Gift Card,Returned,TRK95935805,5,,Referral,2332.1
+ORD200343,2023-02-26,C64638,Printer,1,527.57,919 Main St,Debit Card,Pending,TRK64087938,3,FREESHIP,Facebook,527.57
+ORD200344,2025-03-06,C95623,Tablet,3,623.34,248 Main St,Online,Cancelled,TRK67558189,3,SAVE10,Instagram,1870.02
+ORD200345,2023-12-07,C24751,Tablet,5,501.26,259 Main St,Gift Card,Shipped,TRK37285406,10,FREESHIP,Referral,2506.3
+ORD200346,2024-12-06,C31764,Tablet,1,655.09,876 Main St,Cash,Pending,TRK44680433,6,,Referral,655.09
+ORD200347,2024-02-03,C83556,Printer,4,264.79,380 Main St,Credit Card,Pending,TRK21109187,5,SAVE10,Google,1059.16
+ORD200348,2024-03-13,C24369,Laptop,3,359.73,885 Main St,Debit Card,Returned,TRK72633998,7,FREESHIP,Email,1079.19
+ORD200349,2023-11-30,C39648,Chair,1,465.33,824 Main St,Gift Card,Delivered,TRK56016905,2,FREESHIP,Google,465.33
+ORD200350,2023-06-03,C13296,Chair,2,54.41,495 Main St,Online,Shipped,TRK60127216,6,,Instagram,108.82
+ORD200351,2025-02-15,C94248,Laptop,1,64.66,494 Main St,Debit Card,Delivered,TRK89406816,4,,Instagram,64.66
+ORD200352,2023-08-31,C26637,Chair,5,173.96,995 Main St,Debit Card,Pending,TRK59546992,8,WINTER15,Instagram,869.8
+ORD200353,2025-03-28,C16012,Tablet,1,630.82,171 Main St,Online,Delivered,TRK15195225,5,FREESHIP,Google,630.82
+ORD200354,2023-07-11,C31772,Phone,1,693.41,992 Main St,Debit Card,Shipped,TRK11970357,4,,Instagram,693.41
+ORD200355,2025-06-03,C18353,Tablet,3,433.33,677 Main St,Credit Card,Cancelled,TRK78766533,4,FREESHIP,Referral,1299.99
+ORD200356,2023-05-06,C26966,Printer,5,374.58,907 Main St,Gift Card,Cancelled,TRK83889574,10,FREESHIP,Instagram,1872.9
+ORD200357,2023-07-08,C74982,Laptop,5,408.56,398 Main St,Debit Card,Delivered,TRK98700702,8,FREESHIP,Instagram,2042.8
+ORD200358,2024-04-07,C70633,Tablet,2,183.67,747 Main St,Online,Cancelled,TRK82540521,3,SAVE10,Google,367.34
+ORD200359,2023-06-09,C95643,Desk,4,606.57,303 Main St,Debit Card,Delivered,TRK23286689,5,WINTER15,Referral,2426.28
+ORD200360,2024-06-06,C53810,Phone,4,589.57,779 Main St,Cash,Pending,TRK34630612,8,,Instagram,2358.28
+ORD200361,2024-06-29,C53464,Printer,5,659.85,197 Main St,Credit Card,Delivered,TRK32743531,9,SAVE10,Facebook,3299.25
+ORD200362,2023-06-27,C53697,Monitor,4,206.84,312 Main St,Cash,Cancelled,TRK60476656,5,WINTER15,Instagram,827.36
+ORD200363,2024-05-24,C31668,Laptop,5,113.87,871 Main St,Credit Card,Pending,TRK42584392,6,SAVE10,Email,569.35
+ORD200364,2023-11-24,C85282,Phone,5,628.74,740 Main St,Cash,Cancelled,TRK86767206,9,FREESHIP,Facebook,3143.7
+ORD200365,2025-02-14,C56796,Phone,1,678.38,607 Main St,Credit Card,Cancelled,TRK74263180,4,SAVE10,Referral,678.38
+ORD200366,2023-02-10,C95213,Printer,3,602.24,603 Main St,Debit Card,Pending,TRK40630538,8,,Referral,1806.72
+ORD200367,2024-04-25,C13108,Laptop,5,658.77,712 Main St,Gift Card,Pending,TRK82284400,10,FREESHIP,Instagram,3293.85
+ORD200368,2023-05-01,C85322,Monitor,3,271.02,403 Main St,Credit Card,Cancelled,TRK89728869,6,,Google,813.06
+ORD200369,2024-12-22,C43545,Monitor,5,375.25,216 Main St,Gift Card,Pending,TRK73937402,9,SAVE10,Email,1876.25
+ORD200370,2025-05-03,C80649,Phone,1,312.11,870 Main St,Online,Cancelled,TRK41143313,4,WINTER15,Facebook,312.11
+ORD200371,2023-01-05,C59752,Phone,5,307.76,179 Main St,Gift Card,Pending,TRK82229639,9,FREESHIP,Google,1538.8
+ORD200372,2025-02-14,C53645,Chair,3,483.53,166 Main St,Cash,Returned,TRK12123939,4,,Referral,1450.59
+ORD200373,2023-01-02,C60178,Laptop,3,341.15,969 Main St,Cash,Pending,TRK84505143,4,FREESHIP,Instagram,1023.45
+ORD200374,2024-09-16,C20286,Monitor,1,571.9,129 Main St,Gift Card,Pending,TRK67648338,1,WINTER15,Instagram,571.9
+ORD200375,2025-01-16,C87547,Monitor,4,95.03,400 Main St,Online,Shipped,TRK71027262,8,FREESHIP,Facebook,380.12
+ORD200376,2023-08-24,C64549,Monitor,5,201.22,341 Main St,Debit Card,Pending,TRK20788231,6,FREESHIP,Facebook,1006.1
+ORD200377,2024-07-22,C24884,Monitor,1,260.26,625 Main St,Online,Pending,TRK44538419,5,WINTER15,Instagram,260.26
+ORD200378,2024-02-01,C62666,Chair,5,64.5,148 Main St,Credit Card,Pending,TRK91029390,8,WINTER15,Instagram,322.5
+ORD200379,2024-09-21,C47284,Phone,3,297.67,500 Main St,Online,Shipped,TRK85756094,6,,Google,893.01
+ORD200380,2024-04-20,C35355,Printer,4,331.9,127 Main St,Cash,Pending,TRK52935059,5,SAVE10,Instagram,1327.6
+ORD200381,2023-06-07,C29467,Chair,1,191.76,223 Main St,Credit Card,Returned,TRK98103385,1,FREESHIP,Instagram,191.76
+ORD200382,2025-01-30,C26718,Printer,4,263.09,272 Main St,Debit Card,Shipped,TRK91702525,8,SAVE10,Google,1052.36
+ORD200383,2023-01-20,C18944,Chair,4,393.8,837 Main St,Credit Card,Pending,TRK45275439,7,SAVE10,Email,1575.2
+ORD200384,2024-11-24,C35628,Chair,3,553.57,147 Main St,Credit Card,Returned,TRK45688220,4,FREESHIP,Facebook,1660.71
+ORD200385,2023-10-31,C56851,Chair,5,191.63,752 Main St,Gift Card,Delivered,TRK65290904,6,FREESHIP,Facebook,958.15
+ORD200386,2023-04-28,C12421,Tablet,1,93.02,373 Main St,Online,Returned,TRK32588504,4,,Email,93.02
+ORD200387,2024-06-27,C25316,Printer,2,39.53,904 Main St,Credit Card,Shipped,TRK55423551,3,WINTER15,Google,79.06
+ORD200388,2023-12-28,C22657,Printer,3,633.97,152 Main St,Cash,Pending,TRK49157047,7,WINTER15,Facebook,1901.91
+ORD200389,2023-12-17,C29703,Desk,4,697.5,558 Main St,Cash,Shipped,TRK40543461,7,FREESHIP,Referral,2790
+ORD200390,2023-07-14,C55996,Printer,5,508.69,885 Main St,Cash,Delivered,TRK30547638,10,FREESHIP,Google,2543.45
+ORD200391,2025-01-16,C60037,Laptop,2,527.46,516 Main St,Debit Card,Cancelled,TRK82009557,3,FREESHIP,Referral,1054.92
+ORD200392,2024-02-28,C95100,Phone,1,627.2,197 Main St,Online,Delivered,TRK47366265,1,WINTER15,Email,627.2
+ORD200393,2024-07-14,C39906,Printer,1,75.01,921 Main St,Credit Card,Returned,TRK24632134,3,,Google,75.01
+ORD200394,2023-07-05,C70148,Desk,5,529.55,359 Main St,Gift Card,Shipped,TRK34848650,10,,Facebook,2647.75
+ORD200395,2025-04-25,C30010,Phone,3,127.41,830 Main St,Gift Card,Delivered,TRK35386084,7,SAVE10,Referral,382.23
+ORD200396,2023-12-01,C99217,Tablet,5,287.13,778 Main St,Online,Shipped,TRK82004594,10,SAVE10,Email,1435.65
+ORD200397,2023-09-28,C30184,Monitor,1,427.06,987 Main St,Online,Cancelled,TRK86674704,1,WINTER15,Referral,427.06
+ORD200398,2024-09-04,C50275,Phone,5,53.93,729 Main St,Gift Card,Shipped,TRK98925264,7,SAVE10,Instagram,269.65
+ORD200399,2024-01-07,C64641,Tablet,5,423.93,319 Main St,Debit Card,Returned,TRK32012588,5,FREESHIP,Facebook,2119.65
+ORD200400,2024-09-28,C56266,Desk,4,160.22,304 Main St,Debit Card,Returned,TRK60088901,9,WINTER15,Instagram,640.88
+ORD200401,2025-04-09,C98635,Printer,1,538.68,197 Main St,Debit Card,Returned,TRK14225465,6,,Referral,538.68
+ORD200402,2023-04-09,C83026,Printer,5,337.38,858 Main St,Gift Card,Shipped,TRK79746259,5,,Referral,1686.9
+ORD200403,2024-11-10,C28893,Tablet,1,620.21,740 Main St,Online,Returned,TRK98333066,1,FREESHIP,Referral,620.21
+ORD200404,2023-03-09,C45482,Monitor,2,99.1,440 Main St,Cash,Delivered,TRK54571699,6,,Instagram,198.2
+ORD200405,2025-01-26,C97774,Monitor,4,451.97,603 Main St,Online,Cancelled,TRK64664424,7,WINTER15,Email,1807.88
+ORD200406,2023-12-10,C11657,Tablet,4,66.1,572 Main St,Cash,Returned,TRK50284486,9,WINTER15,Google,264.4
+ORD200407,2023-08-13,C85993,Tablet,4,547.32,250 Main St,Cash,Returned,TRK72547640,8,FREESHIP,Instagram,2189.28
+ORD200408,2025-01-01,C11906,Printer,3,412.53,536 Main St,Online,Pending,TRK31140158,6,WINTER15,Google,1237.59
+ORD200409,2023-06-28,C45187,Desk,5,84.13,767 Main St,Online,Delivered,TRK12320793,9,SAVE10,Google,420.65
+ORD200410,2024-01-18,C37375,Tablet,2,518.23,184 Main St,Debit Card,Shipped,TRK52470162,5,,Email,1036.46
+ORD200411,2024-06-19,C66567,Desk,2,39.51,981 Main St,Online,Shipped,TRK21174822,5,,Facebook,79.02
+ORD200412,2025-04-11,C42451,Tablet,5,133.01,246 Main St,Credit Card,Returned,TRK31313343,10,,Facebook,665.05
+ORD200413,2023-10-08,C13923,Tablet,1,118.8,123 Main St,Online,Delivered,TRK87598790,6,SAVE10,Email,118.8
+ORD200414,2025-05-04,C11829,Desk,2,139.57,797 Main St,Cash,Delivered,TRK84229257,4,WINTER15,Facebook,279.14
+ORD200415,2025-04-06,C62169,Chair,1,184.15,655 Main St,Gift Card,Shipped,TRK64558985,5,FREESHIP,Facebook,184.15
+ORD200416,2023-07-18,C20881,Laptop,2,644.05,652 Main St,Gift Card,Cancelled,TRK26263902,5,WINTER15,Referral,1288.1
+ORD200417,2023-10-24,C44492,Laptop,5,55.41,954 Main St,Online,Cancelled,TRK51429869,5,,Google,277.05
+ORD200418,2023-01-11,C74169,Printer,1,310.93,862 Main St,Online,Cancelled,TRK66144809,3,,Facebook,310.93
+ORD200419,2024-04-17,C70999,Tablet,2,216.66,885 Main St,Debit Card,Pending,TRK75644156,6,FREESHIP,Instagram,433.32
+ORD200420,2024-11-29,C11921,Phone,1,452.7,439 Main St,Debit Card,Shipped,TRK91362635,5,FREESHIP,Instagram,452.7
+ORD200421,2023-10-15,C50683,Chair,2,288.21,769 Main St,Debit Card,Cancelled,TRK53032122,5,,Email,576.42
+ORD200422,2023-06-05,C76140,Phone,4,206.6,914 Main St,Gift Card,Returned,TRK25861469,6,WINTER15,Referral,826.4
+ORD200423,2024-07-20,C94311,Printer,4,685.2,195 Main St,Gift Card,Cancelled,TRK97308771,6,WINTER15,Google,2740.8
+ORD200424,2023-04-12,C49491,Chair,5,22.94,339 Main St,Cash,Pending,TRK64012257,10,,Email,114.7
+ORD200425,2023-03-09,C40648,Laptop,2,301.88,488 Main St,Gift Card,Returned,TRK25325993,5,WINTER15,Email,603.76
+ORD200426,2025-03-16,C40967,Monitor,5,57.45,315 Main St,Cash,Cancelled,TRK24839296,10,,Facebook,287.25
+ORD200427,2024-12-18,C25406,Desk,1,161.24,379 Main St,Credit Card,Pending,TRK70952564,3,WINTER15,Instagram,161.24
+ORD200428,2024-11-26,C77085,Chair,4,262.58,895 Main St,Online,Cancelled,TRK57227640,8,WINTER15,Email,1050.32
+ORD200429,2024-12-19,C38126,Printer,4,515.19,522 Main St,Credit Card,Pending,TRK90838498,9,SAVE10,Facebook,2060.76
+ORD200430,2023-06-07,C87448,Phone,1,450.07,433 Main St,Gift Card,Shipped,TRK44134016,6,FREESHIP,Google,450.07
+ORD200431,2024-10-06,C62312,Printer,1,52.54,651 Main St,Debit Card,Cancelled,TRK59623037,6,WINTER15,Facebook,52.54
+ORD200432,2023-09-04,C58443,Tablet,2,424.32,662 Main St,Credit Card,Returned,TRK77163738,6,,Referral,848.64
+ORD200433,2023-08-26,C36613,Monitor,3,631.64,785 Main St,Credit Card,Returned,TRK13282106,3,FREESHIP,Facebook,1894.92
+ORD200434,2023-10-22,C73893,Printer,5,327.68,384 Main St,Credit Card,Returned,TRK85939879,6,,Facebook,1638.4
+ORD200435,2023-05-27,C48601,Printer,1,414.47,101 Main St,Debit Card,Returned,TRK97868309,3,FREESHIP,Instagram,414.47
+ORD200436,2023-02-11,C14568,Laptop,4,221.33,651 Main St,Online,Pending,TRK73545796,5,,Google,885.32
+ORD200437,2024-04-18,C63378,Phone,1,512.39,955 Main St,Online,Delivered,TRK20863705,2,FREESHIP,Instagram,512.39
+ORD200438,2025-01-03,C77800,Tablet,3,459.34,436 Main St,Gift Card,Pending,TRK27439574,3,SAVE10,Instagram,1378.02
+ORD200439,2024-09-08,C91155,Tablet,1,146.32,321 Main St,Online,Shipped,TRK36260319,4,WINTER15,Facebook,146.32
+ORD200440,2024-11-05,C60215,Desk,4,83.6,978 Main St,Debit Card,Pending,TRK31727767,4,SAVE10,Facebook,334.4
+ORD200441,2023-12-13,C52915,Printer,2,328.54,475 Main St,Gift Card,Returned,TRK79466982,6,FREESHIP,Email,657.08
+ORD200442,2024-05-06,C72588,Chair,5,314.94,661 Main St,Cash,Pending,TRK43410829,8,SAVE10,Instagram,1574.7
+ORD200443,2024-05-14,C61668,Chair,2,69.64,813 Main St,Cash,Returned,TRK58970302,6,,Facebook,139.28
+ORD200444,2024-06-08,C79508,Printer,1,135.17,585 Main St,Online,Shipped,TRK61882353,6,FREESHIP,Instagram,135.17
+ORD200445,2024-03-23,C94569,Phone,1,487.21,227 Main St,Cash,Delivered,TRK31351770,3,SAVE10,Referral,487.21
+ORD200446,2023-10-18,C89592,Laptop,5,509.58,262 Main St,Online,Delivered,TRK49442402,6,FREESHIP,Instagram,2547.9
+ORD200447,2024-04-07,C48207,Printer,2,416.81,356 Main St,Cash,Returned,TRK45355655,2,,Facebook,833.62
+ORD200448,2023-09-04,C16776,Laptop,2,160,854 Main St,Cash,Pending,TRK12860600,4,SAVE10,Instagram,320
+ORD200449,2024-08-26,C91518,Tablet,3,253.05,286 Main St,Online,Pending,TRK48688724,3,,Instagram,759.15
+ORD200450,2024-01-15,C36408,Monitor,5,615.1,160 Main St,Gift Card,Returned,TRK94023253,10,WINTER15,Instagram,3075.5
+ORD200451,2023-04-01,C14837,Monitor,1,183.18,647 Main St,Debit Card,Cancelled,TRK17501136,6,SAVE10,Email,183.18
+ORD200452,2023-07-23,C36467,Printer,1,75.78,581 Main St,Cash,Pending,TRK20863987,5,SAVE10,Google,75.78
+ORD200453,2025-05-02,C15017,Tablet,1,675.57,492 Main St,Cash,Shipped,TRK51241924,1,WINTER15,Facebook,675.57
+ORD200454,2024-11-27,C54759,Laptop,1,109.29,686 Main St,Debit Card,Cancelled,TRK75583042,5,FREESHIP,Google,109.29
+ORD200455,2024-03-26,C58341,Phone,1,639.83,874 Main St,Debit Card,Pending,TRK32856728,2,SAVE10,Referral,639.83
+ORD200456,2023-06-26,C94479,Desk,5,62.81,259 Main St,Credit Card,Shipped,TRK69089975,9,SAVE10,Facebook,314.05
+ORD200457,2025-05-25,C50236,Desk,4,615.83,545 Main St,Online,Returned,TRK67692578,4,WINTER15,Instagram,2463.32
+ORD200458,2024-07-02,C31412,Monitor,4,510.58,196 Main St,Credit Card,Returned,TRK61946127,7,WINTER15,Email,2042.32
+ORD200459,2024-07-24,C90142,Desk,1,334.39,433 Main St,Credit Card,Returned,TRK39717191,2,,Instagram,334.39
+ORD200460,2024-10-06,C83548,Laptop,1,144.25,474 Main St,Cash,Returned,TRK93822942,2,WINTER15,Referral,144.25
+ORD200461,2024-06-08,C29697,Tablet,1,401.82,407 Main St,Credit Card,Shipped,TRK47776482,5,FREESHIP,Google,401.82
+ORD200462,2025-03-31,C22991,Phone,1,252.68,731 Main St,Online,Cancelled,TRK32796086,1,,Referral,252.68
+ORD200463,2023-05-26,C25276,Laptop,5,662.78,214 Main St,Debit Card,Shipped,TRK14011732,9,SAVE10,Instagram,3313.9
+ORD200464,2023-03-14,C39176,Tablet,4,434.42,739 Main St,Online,Cancelled,TRK71418686,6,FREESHIP,Google,1737.68
+ORD200465,2024-02-26,C58773,Printer,5,513.49,391 Main St,Gift Card,Cancelled,TRK65438300,8,,Google,2567.45
+ORD200466,2023-07-18,C37412,Phone,1,432.47,895 Main St,Cash,Delivered,TRK97829604,4,FREESHIP,Referral,432.47
+ORD200467,2024-08-30,C36492,Desk,1,45.94,572 Main St,Cash,Cancelled,TRK44350440,2,WINTER15,Email,45.94
+ORD200468,2025-06-21,C90110,Phone,1,418.36,998 Main St,Credit Card,Delivered,TRK60203957,5,FREESHIP,Email,418.36
+ORD200469,2023-11-26,C13877,Chair,5,676.98,893 Main St,Cash,Cancelled,TRK17254691,5,,Facebook,3384.9
+ORD200470,2023-09-29,C25149,Tablet,4,263.62,672 Main St,Cash,Shipped,TRK33538608,5,SAVE10,Email,1054.48
+ORD200471,2025-04-19,C52717,Desk,5,551.27,395 Main St,Online,Cancelled,TRK27625571,7,FREESHIP,Referral,2756.35
+ORD200472,2023-01-06,C60029,Chair,3,508.12,796 Main St,Credit Card,Cancelled,TRK86461316,8,FREESHIP,Referral,1524.36
+ORD200473,2025-02-25,C28552,Chair,2,14.93,449 Main St,Online,Shipped,TRK71597160,4,,Facebook,29.86
+ORD200474,2023-11-15,C72293,Printer,3,229.34,398 Main St,Credit Card,Shipped,TRK84378003,6,SAVE10,Referral,688.02
+ORD200475,2025-04-19,C29844,Tablet,2,438.62,363 Main St,Cash,Cancelled,TRK91642337,3,SAVE10,Facebook,877.24
+ORD200476,2024-01-15,C77872,Phone,2,513.59,867 Main St,Online,Returned,TRK19292184,4,FREESHIP,Referral,1027.18
+ORD200477,2025-03-05,C56564,Phone,2,253.74,481 Main St,Online,Shipped,TRK13166044,5,SAVE10,Google,507.48
+ORD200478,2024-11-01,C16758,Tablet,3,62.77,914 Main St,Gift Card,Shipped,TRK88544431,6,FREESHIP,Referral,188.31
+ORD200479,2023-02-18,C87011,Monitor,4,25.29,943 Main St,Credit Card,Pending,TRK21429162,8,,Google,101.16
+ORD200480,2023-06-16,C21147,Chair,1,335.1,126 Main St,Debit Card,Pending,TRK93171043,6,FREESHIP,Referral,335.1
+ORD200481,2023-04-23,C94568,Laptop,4,484.85,317 Main St,Debit Card,Delivered,TRK58653915,5,WINTER15,Referral,1939.4
+ORD200482,2025-03-02,C35852,Monitor,3,381.41,989 Main St,Online,Pending,TRK22302049,6,,Instagram,1144.23
+ORD200483,2023-01-18,C66462,Phone,5,347.92,982 Main St,Cash,Pending,TRK52743700,6,WINTER15,Google,1739.6
+ORD200484,2024-05-29,C29092,Chair,4,15.01,767 Main St,Cash,Cancelled,TRK90455340,6,,Facebook,60.04
+ORD200485,2023-08-01,C46651,Chair,3,404.79,764 Main St,Cash,Shipped,TRK67679195,6,SAVE10,Instagram,1214.37
+ORD200486,2023-02-03,C88981,Printer,4,611.26,558 Main St,Cash,Shipped,TRK75267873,5,SAVE10,Referral,2445.04
+ORD200487,2023-03-09,C40136,Printer,3,346.52,211 Main St,Credit Card,Pending,TRK92924852,3,SAVE10,Google,1039.56
+ORD200488,2024-12-05,C81573,Chair,1,36.65,556 Main St,Online,Cancelled,TRK96522994,1,WINTER15,Email,36.65
+ORD200489,2023-09-05,C11940,Tablet,3,149.34,589 Main St,Gift Card,Cancelled,TRK85466461,7,WINTER15,Email,448.02
+ORD200490,2024-07-22,C50097,Chair,5,467.81,539 Main St,Online,Cancelled,TRK62785150,10,,Facebook,2339.05
+ORD200491,2023-01-05,C98168,Phone,5,420.7,481 Main St,Cash,Pending,TRK56423359,5,WINTER15,Facebook,2103.5
+ORD200492,2023-10-25,C39074,Laptop,5,606.52,103 Main St,Debit Card,Shipped,TRK13027036,6,SAVE10,Instagram,3032.6
+ORD200493,2025-01-28,C84908,Phone,1,420.26,372 Main St,Credit Card,Pending,TRK64135970,4,FREESHIP,Facebook,420.26
+ORD200494,2023-07-19,C64516,Laptop,3,505.79,459 Main St,Debit Card,Pending,TRK63920573,3,FREESHIP,Referral,1517.37
+ORD200495,2025-06-05,C63827,Phone,4,493.73,947 Main St,Debit Card,Pending,TRK35730581,6,SAVE10,Facebook,1974.92
+ORD200496,2025-03-14,C93618,Printer,3,201.21,249 Main St,Online,Cancelled,TRK66129326,3,SAVE10,Google,603.63
+ORD200497,2024-10-24,C93948,Printer,3,112.29,454 Main St,Gift Card,Shipped,TRK77358113,6,,Google,336.87
+ORD200498,2023-07-12,C73961,Tablet,4,132.56,306 Main St,Cash,Returned,TRK32607173,8,WINTER15,Instagram,530.24
+ORD200499,2023-04-06,C18138,Printer,3,539.46,520 Main St,Credit Card,Shipped,TRK20289483,4,SAVE10,Facebook,1618.38
+ORD200500,2024-04-07,C79475,Laptop,5,508.59,169 Main St,Cash,Returned,TRK42168516,8,WINTER15,Facebook,2542.95
+ORD200501,2024-02-04,C88546,Desk,4,203.46,226 Main St,Credit Card,Pending,TRK19867754,7,SAVE10,Referral,813.84
+ORD200502,2023-05-20,C69332,Monitor,3,565.25,745 Main St,Debit Card,Returned,TRK65718848,7,SAVE10,Email,1695.75
+ORD200503,2023-08-31,C64554,Tablet,3,136.84,498 Main St,Online,Pending,TRK95384568,4,FREESHIP,Facebook,410.52
+ORD200504,2025-06-11,C11676,Monitor,2,464.5,805 Main St,Online,Cancelled,TRK35726395,2,WINTER15,Instagram,929
+ORD200505,2023-06-11,C36014,Printer,2,434.97,558 Main St,Online,Shipped,TRK97246526,7,,Email,869.94
+ORD200506,2023-07-25,C23279,Monitor,2,43.67,696 Main St,Cash,Returned,TRK58039693,4,WINTER15,Instagram,87.34
+ORD200507,2023-07-05,C86481,Phone,1,171.59,546 Main St,Credit Card,Pending,TRK87513944,5,WINTER15,Email,171.59
+ORD200508,2025-05-14,C39550,Phone,1,558.27,976 Main St,Online,Delivered,TRK24120267,1,,Referral,558.27
+ORD200509,2023-02-15,C68937,Laptop,2,425.03,560 Main St,Cash,Returned,TRK31908657,2,WINTER15,Google,850.06
+ORD200510,2024-12-16,C72533,Printer,1,376.76,389 Main St,Debit Card,Delivered,TRK51288986,5,SAVE10,Email,376.76
+ORD200511,2024-03-15,C11415,Monitor,5,575.24,267 Main St,Cash,Delivered,TRK65061457,7,WINTER15,Email,2876.2
+ORD200512,2024-09-27,C14114,Desk,3,568.02,856 Main St,Online,Pending,TRK63290700,3,FREESHIP,Instagram,1704.06
+ORD200513,2025-02-09,C64128,Tablet,3,94.88,533 Main St,Gift Card,Shipped,TRK37053575,8,,Referral,284.64
+ORD200514,2023-04-16,C15629,Printer,3,304.15,492 Main St,Gift Card,Shipped,TRK64926044,3,WINTER15,Instagram,912.45
+ORD200515,2023-03-14,C67561,Phone,3,553.52,160 Main St,Gift Card,Shipped,TRK75900717,4,FREESHIP,Facebook,1660.56
+ORD200516,2024-04-07,C47022,Monitor,3,166.99,208 Main St,Cash,Returned,TRK28855040,8,,Facebook,500.97
+ORD200517,2024-04-09,C55205,Tablet,4,198.35,943 Main St,Cash,Cancelled,TRK88141634,7,FREESHIP,Google,793.4
+ORD200518,2025-06-13,C30686,Printer,4,403.58,319 Main St,Online,Pending,TRK59807273,9,SAVE10,Referral,1614.32
+ORD200519,2025-05-10,C71797,Laptop,4,464.29,941 Main St,Debit Card,Returned,TRK66010667,5,SAVE10,Email,1857.16
+ORD200520,2023-03-10,C66332,Monitor,3,635.98,959 Main St,Cash,Returned,TRK27063398,5,,Referral,1907.94
+ORD200521,2024-02-25,C82318,Phone,1,528.06,991 Main St,Credit Card,Shipped,TRK37534165,2,,Facebook,528.06
+ORD200522,2024-04-20,C66254,Chair,1,515.32,740 Main St,Gift Card,Cancelled,TRK82843861,1,FREESHIP,Email,515.32
+ORD200523,2025-02-18,C65083,Desk,4,657.79,652 Main St,Credit Card,Returned,TRK60937148,6,WINTER15,Google,2631.16
+ORD200524,2023-10-25,C44778,Phone,1,153,103 Main St,Credit Card,Returned,TRK92617366,4,,Referral,153
+ORD200525,2023-12-03,C54499,Monitor,1,668.48,160 Main St,Debit Card,Shipped,TRK18061555,1,SAVE10,Email,668.48
+ORD200526,2024-02-29,C91201,Desk,2,46.5,837 Main St,Cash,Returned,TRK63526023,7,WINTER15,Google,93
+ORD200527,2024-08-19,C27202,Chair,5,653.47,967 Main St,Credit Card,Cancelled,TRK75406128,10,SAVE10,Referral,3267.35
+ORD200528,2025-02-26,C32011,Chair,1,628.89,686 Main St,Credit Card,Returned,TRK70997744,2,SAVE10,Referral,628.89
+ORD200529,2024-04-07,C21181,Tablet,2,675.1,938 Main St,Cash,Pending,TRK50363421,4,FREESHIP,Google,1350.2
+ORD200530,2024-07-18,C98450,Chair,4,89.41,613 Main St,Online,Pending,TRK14809530,9,,Google,357.64
+ORD200531,2024-07-02,C64502,Desk,5,320.01,722 Main St,Gift Card,Delivered,TRK14914388,6,,Referral,1600.05
+ORD200532,2025-05-03,C47365,Laptop,2,41,369 Main St,Online,Delivered,TRK42207882,7,,Email,82
+ORD200533,2023-03-05,C66349,Desk,1,565.85,715 Main St,Gift Card,Returned,TRK63550793,1,FREESHIP,Facebook,565.85
+ORD200534,2024-06-06,C73289,Chair,3,648.59,906 Main St,Debit Card,Cancelled,TRK70872738,4,SAVE10,Email,1945.77
+ORD200535,2024-07-24,C48649,Monitor,3,68.12,332 Main St,Online,Cancelled,TRK45821445,3,FREESHIP,Email,204.36
+ORD200536,2024-06-09,C18724,Chair,1,616.1,124 Main St,Cash,Returned,TRK52508861,6,,Email,616.1
+ORD200537,2025-03-23,C68553,Tablet,3,247.47,385 Main St,Online,Delivered,TRK58218971,4,SAVE10,Facebook,742.41
+ORD200538,2024-05-24,C61280,Phone,3,490.74,100 Main St,Cash,Shipped,TRK95487711,3,WINTER15,Email,1472.22
+ORD200539,2025-02-18,C53277,Desk,3,531.72,473 Main St,Gift Card,Delivered,TRK17653832,7,SAVE10,Google,1595.16
+ORD200540,2024-01-29,C87281,Laptop,5,648.65,852 Main St,Online,Pending,TRK81765057,7,,Referral,3243.25
+ORD200541,2023-08-07,C69009,Printer,5,456.06,879 Main St,Cash,Pending,TRK61295842,10,,Instagram,2280.3
+ORD200542,2023-11-14,C49726,Tablet,1,17.98,934 Main St,Cash,Cancelled,TRK20739460,6,FREESHIP,Email,17.98
+ORD200543,2024-03-09,C37531,Desk,5,269.86,354 Main St,Cash,Shipped,TRK93877673,6,WINTER15,Facebook,1349.3
+ORD200544,2024-03-10,C48713,Printer,5,31.96,373 Main St,Credit Card,Returned,TRK96334419,5,FREESHIP,Referral,159.8
+ORD200545,2023-12-19,C74138,Monitor,2,98.47,964 Main St,Cash,Returned,TRK74091695,3,,Instagram,196.94
+ORD200546,2024-03-01,C82399,Monitor,1,158.68,928 Main St,Credit Card,Returned,TRK77177284,6,WINTER15,Instagram,158.68
+ORD200547,2023-08-20,C40427,Phone,1,613.98,411 Main St,Online,Delivered,TRK25392280,4,FREESHIP,Facebook,613.98
+ORD200548,2024-01-05,C17103,Printer,3,426.12,922 Main St,Online,Delivered,TRK64398650,5,WINTER15,Instagram,1278.36
+ORD200549,2025-02-25,C34266,Monitor,4,629.88,550 Main St,Debit Card,Cancelled,TRK56378197,8,WINTER15,Instagram,2519.52
+ORD200550,2023-10-29,C97485,Laptop,4,228.91,573 Main St,Cash,Shipped,TRK81794737,4,FREESHIP,Google,915.64
+ORD200551,2023-05-18,C23947,Laptop,1,120.98,353 Main St,Debit Card,Delivered,TRK74812710,6,WINTER15,Email,120.98
+ORD200552,2023-09-30,C21665,Chair,4,425.18,560 Main St,Online,Returned,TRK29890761,8,WINTER15,Facebook,1700.72
+ORD200553,2023-08-23,C82550,Phone,2,333.83,828 Main St,Gift Card,Cancelled,TRK74103758,4,FREESHIP,Referral,667.66
+ORD200554,2025-05-30,C61943,Laptop,2,492.9,610 Main St,Cash,Returned,TRK66126496,5,FREESHIP,Instagram,985.8
+ORD200555,2023-01-07,C88933,Tablet,1,92.04,333 Main St,Cash,Shipped,TRK89306964,2,,Facebook,92.04
+ORD200556,2023-01-28,C30923,Laptop,1,654.27,932 Main St,Gift Card,Pending,TRK82609328,2,SAVE10,Facebook,654.27
+ORD200557,2023-06-29,C56969,Tablet,1,56.2,130 Main St,Debit Card,Pending,TRK40719215,1,WINTER15,Facebook,56.2
+ORD200558,2024-07-16,C76766,Phone,4,628.12,485 Main St,Online,Delivered,TRK32052962,6,WINTER15,Instagram,2512.48
+ORD200559,2024-04-15,C22981,Desk,3,157.4,454 Main St,Debit Card,Cancelled,TRK10115285,7,WINTER15,Email,472.2
+ORD200560,2023-01-31,C33634,Monitor,4,588.85,524 Main St,Gift Card,Pending,TRK93168008,7,,Email,2355.4
+ORD200561,2023-01-31,C96822,Printer,2,494.78,198 Main St,Online,Shipped,TRK89180077,2,,Google,989.56
+ORD200562,2023-10-06,C76675,Laptop,3,663.93,922 Main St,Gift Card,Returned,TRK28043915,6,FREESHIP,Email,1991.79
+ORD200563,2023-12-12,C12039,Laptop,1,132.68,844 Main St,Debit Card,Returned,TRK68645763,1,SAVE10,Referral,132.68
+ORD200564,2025-04-08,C93309,Desk,5,364.28,734 Main St,Credit Card,Cancelled,TRK99446987,5,WINTER15,Google,1821.4
+ORD200565,2023-05-14,C62042,Tablet,5,307.98,214 Main St,Online,Pending,TRK42605492,10,,Facebook,1539.9
+ORD200566,2024-04-18,C83223,Phone,4,162.71,167 Main St,Cash,Cancelled,TRK54339083,7,FREESHIP,Email,650.84
+ORD200567,2024-09-30,C92575,Chair,5,492.94,153 Main St,Cash,Shipped,TRK53579227,10,FREESHIP,Email,2464.7
+ORD200568,2023-03-10,C29072,Laptop,2,343.99,312 Main St,Online,Delivered,TRK72334047,4,,Google,687.98
+ORD200569,2025-03-22,C25783,Desk,5,250.68,672 Main St,Cash,Shipped,TRK13289741,8,SAVE10,Instagram,1253.4
+ORD200570,2024-12-27,C63727,Desk,2,362.14,122 Main St,Debit Card,Pending,TRK13611021,2,SAVE10,Instagram,724.28
+ORD200571,2024-11-23,C42365,Tablet,1,214.08,867 Main St,Gift Card,Returned,TRK39563288,2,WINTER15,Google,214.08
+ORD200572,2023-11-11,C27438,Printer,1,70.32,341 Main St,Cash,Returned,TRK69125497,4,WINTER15,Facebook,70.32
+ORD200573,2023-01-25,C13205,Chair,5,421.42,522 Main St,Debit Card,Cancelled,TRK30686578,7,,Instagram,2107.1
+ORD200574,2024-01-24,C29685,Chair,5,384.69,275 Main St,Credit Card,Pending,TRK97733212,6,FREESHIP,Email,1923.45
+ORD200575,2023-06-07,C74005,Chair,5,448.15,528 Main St,Gift Card,Returned,TRK61640534,7,SAVE10,Google,2240.75
+ORD200576,2024-05-29,C14457,Laptop,5,79.08,747 Main St,Cash,Pending,TRK42517811,8,,Facebook,395.4
+ORD200577,2023-01-22,C77046,Tablet,4,185.41,967 Main St,Online,Returned,TRK44401497,9,WINTER15,Google,741.64
+ORD200578,2024-10-10,C50415,Monitor,5,566.07,587 Main St,Credit Card,Delivered,TRK41345634,6,SAVE10,Instagram,2830.35
+ORD200579,2023-06-04,C73999,Tablet,2,187.88,413 Main St,Online,Shipped,TRK67919507,4,WINTER15,Facebook,375.76
+ORD200580,2023-11-14,C71076,Monitor,2,255.99,340 Main St,Credit Card,Delivered,TRK65148292,4,SAVE10,Instagram,511.98
+ORD200581,2024-11-11,C44674,Laptop,1,627.34,942 Main St,Online,Delivered,TRK87158684,1,,Referral,627.34
+ORD200582,2024-02-19,C15228,Tablet,3,474.14,558 Main St,Gift Card,Shipped,TRK33860620,8,WINTER15,Google,1422.42
+ORD200583,2025-06-15,C27072,Chair,3,154.37,996 Main St,Gift Card,Delivered,TRK29750379,4,,Instagram,463.11
+ORD200584,2025-03-21,C15257,Chair,4,145.05,626 Main St,Online,Delivered,TRK28779938,6,SAVE10,Google,580.2
+ORD200585,2023-08-20,C91486,Tablet,4,67.08,907 Main St,Cash,Returned,TRK79617136,8,WINTER15,Google,268.32
+ORD200586,2024-11-10,C17389,Monitor,1,522.08,905 Main St,Gift Card,Returned,TRK98857880,5,FREESHIP,Referral,522.08
+ORD200587,2023-06-12,C18820,Monitor,5,514.6,347 Main St,Gift Card,Delivered,TRK91547425,10,FREESHIP,Instagram,2573
+ORD200588,2024-12-10,C61849,Monitor,4,577.82,811 Main St,Credit Card,Delivered,TRK47613918,9,,Google,2311.28
+ORD200589,2025-02-10,C84041,Laptop,2,500.8,900 Main St,Cash,Delivered,TRK84920444,3,FREESHIP,Referral,1001.6
+ORD200590,2023-09-10,C55757,Printer,2,461.13,175 Main St,Gift Card,Returned,TRK27356242,4,,Email,922.26
+ORD200591,2024-11-18,C18187,Laptop,1,605.28,470 Main St,Gift Card,Shipped,TRK50528185,3,FREESHIP,Referral,605.28
+ORD200592,2024-04-23,C42306,Phone,3,204.27,938 Main St,Online,Returned,TRK15499648,4,,Google,612.81
+ORD200593,2023-08-02,C51024,Monitor,1,489.8,636 Main St,Gift Card,Shipped,TRK31375086,4,FREESHIP,Facebook,489.8
+ORD200594,2024-02-21,C40140,Phone,5,72.64,598 Main St,Credit Card,Cancelled,TRK12671989,7,,Email,363.2
+ORD200595,2025-01-10,C72596,Printer,2,385.16,491 Main St,Online,Pending,TRK83870446,7,SAVE10,Email,770.32
+ORD200596,2023-06-12,C91805,Desk,3,606.41,653 Main St,Debit Card,Returned,TRK34504030,7,FREESHIP,Facebook,1819.23
+ORD200597,2024-11-25,C40538,Desk,2,211.82,700 Main St,Gift Card,Cancelled,TRK29821356,4,WINTER15,Email,423.64
+ORD200598,2024-04-26,C60329,Desk,5,495.35,826 Main St,Credit Card,Pending,TRK59069987,5,,Facebook,2476.75
+ORD200599,2023-06-30,C28740,Chair,3,556.99,123 Main St,Online,Cancelled,TRK33642221,4,FREESHIP,Facebook,1670.97
+ORD200600,2023-05-26,C87051,Printer,1,72.31,460 Main St,Gift Card,Cancelled,TRK82056333,1,FREESHIP,Facebook,72.31
+ORD200601,2023-10-02,C12479,Monitor,5,24.82,529 Main St,Credit Card,Shipped,TRK73935314,10,,Referral,124.1
+ORD200602,2024-03-05,C35852,Tablet,4,26.04,982 Main St,Online,Pending,TRK64660134,5,SAVE10,Instagram,104.16
+ORD200603,2024-10-04,C26223,Tablet,1,657.07,800 Main St,Cash,Pending,TRK50900547,4,SAVE10,Google,657.07
+ORD200604,2025-06-22,C99214,Chair,3,32.62,252 Main St,Debit Card,Delivered,TRK81368481,6,,Facebook,97.86
+ORD200605,2024-05-10,C49605,Monitor,2,228.91,892 Main St,Debit Card,Shipped,TRK95620066,4,SAVE10,Referral,457.82
+ORD200606,2024-11-06,C85018,Laptop,3,274.75,783 Main St,Cash,Cancelled,TRK54128886,3,SAVE10,Google,824.25
+ORD200607,2025-05-31,C96434,Printer,4,634.05,282 Main St,Cash,Shipped,TRK56730647,6,SAVE10,Google,2536.2
+ORD200608,2024-07-24,C32956,Laptop,5,543.16,788 Main St,Online,Cancelled,TRK73140103,6,SAVE10,Instagram,2715.8
+ORD200609,2025-01-27,C41137,Chair,3,449.13,809 Main St,Cash,Returned,TRK52732162,5,WINTER15,Referral,1347.39
+ORD200610,2024-06-16,C60361,Desk,5,389.62,623 Main St,Cash,Returned,TRK83566924,7,FREESHIP,Facebook,1948.1
+ORD200611,2023-04-21,C36688,Desk,1,305.17,700 Main St,Gift Card,Returned,TRK35720426,3,WINTER15,Referral,305.17
+ORD200612,2023-06-02,C51811,Chair,3,445.12,339 Main St,Gift Card,Cancelled,TRK82377939,8,,Google,1335.36
+ORD200613,2024-12-19,C62405,Laptop,2,230.36,154 Main St,Online,Returned,TRK14721763,4,WINTER15,Email,460.72
+ORD200614,2024-03-08,C77363,Phone,1,96.81,807 Main St,Gift Card,Cancelled,TRK12439827,3,,Referral,96.81
+ORD200615,2025-03-07,C97218,Monitor,5,460.14,252 Main St,Credit Card,Returned,TRK52632065,10,WINTER15,Facebook,2300.7
+ORD200616,2024-10-17,C43919,Tablet,3,601.6,984 Main St,Credit Card,Cancelled,TRK73113192,7,SAVE10,Facebook,1804.8
+ORD200617,2024-02-08,C57093,Tablet,3,184.47,834 Main St,Online,Cancelled,TRK75469057,4,,Referral,553.41
+ORD200618,2024-09-03,C50565,Tablet,1,411.34,399 Main St,Debit Card,Returned,TRK97981418,5,,Instagram,411.34
+ORD200619,2024-07-16,C38845,Laptop,1,532.89,764 Main St,Gift Card,Pending,TRK47637374,2,,Referral,532.89
+ORD200620,2024-03-27,C84834,Tablet,3,136.34,866 Main St,Debit Card,Returned,TRK90136001,8,SAVE10,Referral,409.02
+ORD200621,2023-10-22,C37455,Phone,5,476.01,146 Main St,Credit Card,Delivered,TRK82685594,7,WINTER15,Google,2380.05
+ORD200622,2024-11-02,C27078,Desk,5,236.38,128 Main St,Credit Card,Returned,TRK89314307,7,,Facebook,1181.9
+ORD200623,2023-06-16,C91941,Printer,3,396,269 Main St,Gift Card,Cancelled,TRK21330732,4,FREESHIP,Instagram,1188
+ORD200624,2024-01-16,C25967,Tablet,5,341.96,747 Main St,Debit Card,Delivered,TRK88559278,6,,Email,1709.8
+ORD200625,2023-09-24,C22123,Tablet,1,672.89,519 Main St,Credit Card,Pending,TRK43250279,1,WINTER15,Email,672.89
+ORD200626,2024-03-01,C45671,Tablet,2,657.48,769 Main St,Online,Shipped,TRK18179773,5,SAVE10,Referral,1314.96
+ORD200627,2023-08-06,C53334,Chair,3,498.68,879 Main St,Online,Returned,TRK31724421,4,FREESHIP,Email,1496.04
+ORD200628,2023-03-26,C18717,Printer,5,558.63,861 Main St,Cash,Pending,TRK58568806,8,FREESHIP,Referral,2793.15
+ORD200629,2023-07-07,C50137,Phone,3,19.73,840 Main St,Online,Pending,TRK91836131,3,,Referral,59.19
+ORD200630,2023-06-23,C51481,Monitor,5,248.84,140 Main St,Debit Card,Cancelled,TRK33437701,10,,Instagram,1244.2
+ORD200631,2024-08-31,C99128,Chair,3,46.11,360 Main St,Gift Card,Returned,TRK32426808,5,WINTER15,Referral,138.33
+ORD200632,2023-05-02,C67260,Laptop,5,678.16,463 Main St,Gift Card,Delivered,TRK38229104,7,WINTER15,Facebook,3390.8
+ORD200633,2024-04-10,C79533,Laptop,5,601.72,921 Main St,Gift Card,Cancelled,TRK54711422,5,WINTER15,Instagram,3008.6
+ORD200634,2024-04-25,C66906,Printer,2,259.32,117 Main St,Gift Card,Delivered,TRK31633755,2,WINTER15,Referral,518.64
+ORD200635,2023-12-13,C12818,Chair,3,63.68,434 Main St,Cash,Returned,TRK40879983,6,,Facebook,191.04
+ORD200636,2023-10-05,C60384,Laptop,4,371.07,336 Main St,Cash,Cancelled,TRK92080037,7,WINTER15,Facebook,1484.28
+ORD200637,2024-09-29,C92294,Chair,4,306.35,784 Main St,Gift Card,Shipped,TRK23585765,7,WINTER15,Referral,1225.4
+ORD200638,2023-10-15,C66840,Tablet,4,578.27,547 Main St,Online,Delivered,TRK76929637,9,WINTER15,Email,2313.08
+ORD200639,2023-01-20,C22534,Chair,1,529.19,391 Main St,Cash,Cancelled,TRK17415798,5,,Referral,529.19
+ORD200640,2024-02-27,C46509,Chair,2,587.49,647 Main St,Gift Card,Returned,TRK24241664,6,SAVE10,Referral,1174.98
+ORD200641,2024-06-30,C71680,Printer,4,567.57,814 Main St,Debit Card,Pending,TRK47386650,9,WINTER15,Google,2270.28
+ORD200642,2024-04-29,C15063,Chair,5,85.22,527 Main St,Credit Card,Cancelled,TRK10329390,7,FREESHIP,Email,426.1
+ORD200643,2024-08-26,C77122,Laptop,1,438.37,647 Main St,Cash,Cancelled,TRK75814880,4,SAVE10,Referral,438.37
+ORD200644,2023-11-15,C86524,Chair,2,366.23,961 Main St,Cash,Shipped,TRK62490506,2,WINTER15,Email,732.46
+ORD200645,2023-01-02,C82990,Laptop,2,150.05,727 Main St,Credit Card,Cancelled,TRK68574801,4,SAVE10,Facebook,300.1
+ORD200646,2023-10-27,C98761,Chair,4,498.51,804 Main St,Debit Card,Shipped,TRK43262630,4,SAVE10,Google,1994.04
+ORD200647,2025-04-24,C54409,Desk,3,339.39,667 Main St,Cash,Returned,TRK67671316,7,FREESHIP,Google,1018.17
+ORD200648,2025-01-18,C89674,Monitor,2,575.83,182 Main St,Online,Delivered,TRK45902512,3,WINTER15,Referral,1151.66
+ORD200649,2023-12-23,C45899,Monitor,2,642.98,153 Main St,Debit Card,Returned,TRK32932093,7,FREESHIP,Email,1285.96
+ORD200650,2023-05-18,C74499,Desk,2,372.23,518 Main St,Gift Card,Delivered,TRK93767278,7,SAVE10,Email,744.46
+ORD200651,2024-11-12,C81192,Chair,3,646.34,429 Main St,Debit Card,Pending,TRK76931118,5,,Google,1939.02
+ORD200652,2024-06-05,C71473,Chair,5,341.84,328 Main St,Online,Shipped,TRK94857335,8,FREESHIP,Instagram,1709.2
+ORD200653,2024-02-25,C59338,Printer,3,690.3,747 Main St,Credit Card,Shipped,TRK12902764,6,WINTER15,Google,2070.9
+ORD200654,2023-06-12,C62661,Tablet,3,382.37,863 Main St,Debit Card,Returned,TRK25748100,8,,Instagram,1147.11
+ORD200655,2023-03-14,C22101,Chair,2,132.6,262 Main St,Debit Card,Cancelled,TRK70711522,4,WINTER15,Email,265.2
+ORD200656,2024-01-18,C51404,Monitor,2,189.06,835 Main St,Gift Card,Shipped,TRK85682500,7,SAVE10,Facebook,378.12
+ORD200657,2023-12-24,C19384,Tablet,4,87.79,532 Main St,Cash,Cancelled,TRK33207064,6,FREESHIP,Instagram,351.16
+ORD200658,2025-04-18,C86864,Printer,2,46.36,670 Main St,Gift Card,Returned,TRK15323191,4,SAVE10,Google,92.72
+ORD200659,2024-10-26,C24301,Phone,2,642.04,964 Main St,Gift Card,Delivered,TRK55000075,4,WINTER15,Email,1284.08
+ORD200660,2024-10-19,C43842,Chair,2,651.57,933 Main St,Debit Card,Shipped,TRK54084424,7,WINTER15,Facebook,1303.14
+ORD200661,2025-02-28,C63657,Tablet,3,424.89,116 Main St,Debit Card,Cancelled,TRK86378984,6,FREESHIP,Google,1274.67
+ORD200662,2023-01-28,C98332,Laptop,3,438.89,985 Main St,Cash,Returned,TRK85744797,3,,Facebook,1316.67
+ORD200663,2024-04-15,C59774,Monitor,1,72.6,941 Main St,Debit Card,Cancelled,TRK87635135,6,FREESHIP,Instagram,72.6
+ORD200664,2024-12-19,C14847,Laptop,4,194.75,188 Main St,Cash,Shipped,TRK46492755,5,,Facebook,779
+ORD200665,2023-05-02,C83653,Tablet,4,231.26,253 Main St,Online,Shipped,TRK32619935,6,WINTER15,Google,925.04
+ORD200666,2024-08-31,C35711,Monitor,4,327.12,788 Main St,Credit Card,Cancelled,TRK45281495,4,,Email,1308.48
+ORD200667,2023-05-03,C10477,Laptop,1,466.42,172 Main St,Gift Card,Pending,TRK41505339,5,SAVE10,Email,466.42
+ORD200668,2024-07-05,C61257,Monitor,2,253.67,981 Main St,Cash,Returned,TRK25226070,3,WINTER15,Facebook,507.34
+ORD200669,2023-02-05,C60547,Desk,1,257,812 Main St,Debit Card,Cancelled,TRK65694249,5,,Referral,257
+ORD200670,2024-04-18,C14576,Desk,4,539.2,747 Main St,Credit Card,Pending,TRK21637540,8,FREESHIP,Google,2156.8
+ORD200671,2023-06-15,C49282,Chair,5,50.74,737 Main St,Gift Card,Cancelled,TRK88653901,7,WINTER15,Google,253.7
+ORD200672,2023-05-09,C14017,Phone,2,624.16,984 Main St,Debit Card,Shipped,TRK71009446,2,SAVE10,Instagram,1248.32
+ORD200673,2023-02-21,C46504,Tablet,2,372.92,131 Main St,Credit Card,Delivered,TRK95024356,7,SAVE10,Email,745.84
+ORD200674,2024-01-09,C56928,Laptop,4,358.75,860 Main St,Gift Card,Delivered,TRK57792939,9,SAVE10,Facebook,1435
+ORD200675,2024-08-06,C97749,Desk,3,342.02,906 Main St,Debit Card,Pending,TRK90233116,5,,Email,1026.06
+ORD200676,2025-06-23,C90431,Laptop,2,422.34,985 Main St,Credit Card,Cancelled,TRK44151723,4,FREESHIP,Instagram,844.68
+ORD200677,2025-04-03,C56722,Tablet,5,22.07,179 Main St,Online,Cancelled,TRK78778569,7,FREESHIP,Instagram,110.35
+ORD200678,2024-11-24,C40863,Chair,3,163.13,457 Main St,Gift Card,Shipped,TRK20553345,5,WINTER15,Facebook,489.39
+ORD200679,2023-02-02,C40798,Tablet,3,360.66,304 Main St,Online,Returned,TRK66106697,5,FREESHIP,Instagram,1081.98
+ORD200680,2023-08-27,C16702,Monitor,3,463.39,694 Main St,Credit Card,Returned,TRK16953491,3,,Facebook,1390.17
+ORD200681,2024-01-30,C38262,Tablet,1,155.27,548 Main St,Debit Card,Shipped,TRK47300502,6,,Email,155.27
+ORD200682,2023-07-23,C50274,Monitor,3,509.42,449 Main St,Credit Card,Cancelled,TRK91729086,5,FREESHIP,Google,1528.26
+ORD200683,2025-05-18,C91591,Desk,4,652.48,887 Main St,Cash,Pending,TRK23554043,5,FREESHIP,Instagram,2609.92
+ORD200684,2024-09-22,C96583,Printer,4,34.84,288 Main St,Credit Card,Shipped,TRK64353241,8,,Email,139.36
+ORD200685,2025-02-07,C64579,Desk,1,234.37,638 Main St,Debit Card,Shipped,TRK10276565,5,FREESHIP,Email,234.37
+ORD200686,2023-10-09,C41903,Desk,3,53.6,525 Main St,Cash,Pending,TRK59112382,4,WINTER15,Facebook,160.8
+ORD200687,2023-09-13,C19742,Tablet,1,332.09,408 Main St,Gift Card,Returned,TRK68845230,5,FREESHIP,Instagram,332.09
+ORD200688,2024-03-06,C20077,Monitor,4,593.22,154 Main St,Credit Card,Cancelled,TRK36415742,8,WINTER15,Facebook,2372.88
+ORD200689,2023-08-29,C13186,Tablet,2,444.84,787 Main St,Online,Shipped,TRK56967415,7,,Facebook,889.68
+ORD200690,2024-07-12,C29318,Monitor,1,24.48,128 Main St,Gift Card,Returned,TRK88666721,1,,Instagram,24.48
+ORD200691,2024-11-24,C36137,Laptop,3,239.08,396 Main St,Cash,Shipped,TRK57376416,8,,Google,717.24
+ORD200692,2023-01-23,C25534,Desk,5,196.84,319 Main St,Credit Card,Delivered,TRK68347402,5,WINTER15,Instagram,984.2
+ORD200693,2025-03-12,C62070,Monitor,1,176.58,674 Main St,Debit Card,Returned,TRK10267127,4,,Referral,176.58
+ORD200694,2023-10-02,C92049,Printer,4,666.52,619 Main St,Cash,Shipped,TRK32287092,8,FREESHIP,Email,2666.08
+ORD200695,2024-11-23,C52604,Printer,5,101.3,553 Main St,Online,Shipped,TRK48839788,7,FREESHIP,Email,506.5
+ORD200696,2023-07-02,C22429,Chair,4,151.2,965 Main St,Gift Card,Pending,TRK38572927,9,WINTER15,Facebook,604.8
+ORD200697,2025-02-04,C27430,Printer,5,94.85,788 Main St,Cash,Shipped,TRK45025840,6,WINTER15,Email,474.25
+ORD200698,2023-01-04,C44366,Laptop,2,388.22,169 Main St,Cash,Delivered,TRK48658394,2,WINTER15,Instagram,776.44
+ORD200699,2023-11-13,C36813,Laptop,3,614.15,897 Main St,Gift Card,Cancelled,TRK84088900,3,,Facebook,1842.45
+ORD200700,2024-09-25,C40201,Laptop,2,92.91,555 Main St,Cash,Returned,TRK30198779,3,WINTER15,Instagram,185.82
+ORD200701,2024-06-23,C75456,Monitor,3,92.22,115 Main St,Credit Card,Delivered,TRK90519490,5,FREESHIP,Email,276.66
+ORD200702,2024-06-09,C33315,Printer,3,562.55,154 Main St,Debit Card,Returned,TRK43589369,6,,Email,1687.65
+ORD200703,2023-03-22,C89336,Desk,1,92.79,799 Main St,Cash,Pending,TRK47665103,3,WINTER15,Email,92.79
+ORD200704,2023-06-03,C96034,Desk,4,30.27,819 Main St,Online,Delivered,TRK87261034,9,FREESHIP,Google,121.08
+ORD200705,2025-03-30,C50114,Monitor,2,49.08,420 Main St,Debit Card,Returned,TRK20214786,7,FREESHIP,Instagram,98.16
+ORD200706,2025-03-02,C85330,Desk,5,228.09,969 Main St,Gift Card,Returned,TRK97693301,9,FREESHIP,Facebook,1140.45
+ORD200707,2024-11-01,C31761,Chair,4,650.04,989 Main St,Gift Card,Cancelled,TRK17628852,6,SAVE10,Facebook,2600.16
+ORD200708,2025-03-04,C25268,Printer,1,665.11,788 Main St,Cash,Pending,TRK20481215,3,FREESHIP,Instagram,665.11
+ORD200709,2024-12-07,C17132,Desk,1,386.03,855 Main St,Online,Pending,TRK37504692,4,FREESHIP,Google,386.03
+ORD200710,2024-07-22,C48790,Laptop,5,21.54,113 Main St,Gift Card,Returned,TRK19086608,10,,Google,107.7
+ORD200711,2024-07-04,C61070,Tablet,2,475.78,632 Main St,Online,Shipped,TRK90764894,2,WINTER15,Google,951.56
+ORD200712,2024-01-09,C56969,Tablet,2,68.4,993 Main St,Gift Card,Pending,TRK10513339,7,FREESHIP,Email,136.8
+ORD200713,2025-06-21,C65056,Tablet,4,532.49,638 Main St,Online,Cancelled,TRK31705278,6,SAVE10,Facebook,2129.96
+ORD200714,2023-04-21,C84888,Laptop,1,51.73,278 Main St,Debit Card,Pending,TRK23612847,1,FREESHIP,Facebook,51.73
+ORD200715,2024-07-26,C68266,Printer,3,653.63,281 Main St,Online,Delivered,TRK96161062,7,FREESHIP,Email,1960.89
+ORD200716,2024-06-13,C84115,Chair,3,454.29,891 Main St,Credit Card,Pending,TRK25466842,4,WINTER15,Google,1362.87
+ORD200717,2023-10-16,C50087,Chair,3,122.11,707 Main St,Online,Delivered,TRK31143760,4,WINTER15,Email,366.33
+ORD200718,2023-04-08,C16790,Laptop,4,64.74,718 Main St,Gift Card,Cancelled,TRK91791367,8,SAVE10,Google,258.96
+ORD200719,2024-01-21,C46920,Laptop,2,681.06,703 Main St,Debit Card,Shipped,TRK86403837,3,FREESHIP,Facebook,1362.12
+ORD200720,2023-09-21,C12740,Desk,5,128.95,305 Main St,Cash,Pending,TRK98506513,10,FREESHIP,Instagram,644.75
+ORD200721,2024-03-18,C46557,Desk,2,118.59,890 Main St,Credit Card,Delivered,TRK56110689,2,,Email,237.18
+ORD200722,2024-11-15,C58156,Printer,1,95.1,516 Main St,Gift Card,Pending,TRK49719458,1,WINTER15,Instagram,95.1
+ORD200723,2023-12-09,C14455,Desk,3,54.95,385 Main St,Cash,Returned,TRK50933724,8,SAVE10,Referral,164.85
+ORD200724,2024-10-18,C63150,Printer,3,136.97,326 Main St,Credit Card,Returned,TRK19348078,4,FREESHIP,Referral,410.91
+ORD200725,2023-03-12,C95269,Chair,2,194.85,372 Main St,Gift Card,Returned,TRK45670926,5,,Referral,389.7
+ORD200726,2024-10-25,C18105,Laptop,4,583.02,338 Main St,Online,Delivered,TRK94006117,4,FREESHIP,Facebook,2332.08
+ORD200727,2024-09-29,C29063,Chair,5,95.75,379 Main St,Online,Shipped,TRK92745947,8,SAVE10,Instagram,478.75
+ORD200728,2024-07-29,C10154,Desk,4,325.76,827 Main St,Gift Card,Shipped,TRK79793300,8,WINTER15,Email,1303.04
+ORD200729,2023-09-08,C36997,Phone,4,186.41,819 Main St,Gift Card,Pending,TRK92794872,6,SAVE10,Google,745.64
+ORD200730,2025-02-22,C77357,Phone,1,474.6,407 Main St,Debit Card,Delivered,TRK91943923,4,SAVE10,Email,474.6
+ORD200731,2024-06-07,C71310,Printer,5,584.46,308 Main St,Credit Card,Returned,TRK48292586,8,,Email,2922.3
+ORD200732,2025-03-07,C80987,Laptop,1,132.05,787 Main St,Online,Delivered,TRK42187776,2,,Google,132.05
+ORD200733,2023-12-04,C90757,Tablet,4,494.84,694 Main St,Cash,Returned,TRK87991608,8,SAVE10,Email,1979.36
+ORD200734,2024-01-23,C51898,Printer,4,224.61,630 Main St,Credit Card,Returned,TRK19767885,6,WINTER15,Facebook,898.44
+ORD200735,2024-06-28,C94508,Monitor,4,44.07,359 Main St,Debit Card,Pending,TRK13443264,6,,Email,176.28
+ORD200736,2024-02-09,C59441,Monitor,5,418.53,696 Main St,Credit Card,Pending,TRK66186874,6,FREESHIP,Google,2092.65
+ORD200737,2024-01-03,C91029,Phone,4,532.87,972 Main St,Cash,Pending,TRK25501930,9,FREESHIP,Instagram,2131.48
+ORD200738,2025-06-04,C96261,Phone,2,485.37,264 Main St,Credit Card,Shipped,TRK44998396,5,SAVE10,Email,970.74
+ORD200739,2024-06-13,C35123,Phone,4,386.73,513 Main St,Cash,Delivered,TRK58979275,4,SAVE10,Facebook,1546.92
+ORD200740,2024-07-20,C10892,Desk,2,377.47,433 Main St,Cash,Pending,TRK76154554,7,,Google,754.94
+ORD200741,2025-01-23,C99683,Monitor,5,332.64,945 Main St,Gift Card,Delivered,TRK87305883,10,,Referral,1663.2
+ORD200742,2024-11-30,C41974,Laptop,3,699.93,726 Main St,Cash,Returned,TRK48051468,7,SAVE10,Google,2099.79
+ORD200743,2024-09-30,C23978,Monitor,1,576.35,549 Main St,Gift Card,Returned,TRK87090813,1,WINTER15,Instagram,576.35
+ORD200744,2024-06-12,C10642,Tablet,2,461.37,200 Main St,Cash,Delivered,TRK98725693,5,SAVE10,Google,922.74
+ORD200745,2023-03-02,C73813,Printer,4,111.3,364 Main St,Debit Card,Pending,TRK89906749,7,FREESHIP,Email,445.2
+ORD200746,2025-02-24,C32183,Desk,3,661.89,551 Main St,Online,Cancelled,TRK76287027,6,WINTER15,Referral,1985.67
+ORD200747,2025-03-12,C54277,Tablet,2,259.58,940 Main St,Debit Card,Delivered,TRK26500181,7,FREESHIP,Instagram,519.16
+ORD200748,2024-07-15,C56553,Tablet,3,70.81,249 Main St,Credit Card,Shipped,TRK37667360,8,FREESHIP,Referral,212.43
+ORD200749,2025-04-13,C17551,Laptop,1,518.39,997 Main St,Debit Card,Pending,TRK88797170,4,FREESHIP,Instagram,518.39
+ORD200750,2023-01-14,C14737,Tablet,4,145.41,637 Main St,Credit Card,Returned,TRK10295115,7,FREESHIP,Email,581.64
+ORD200751,2023-01-24,C35168,Tablet,2,599.86,455 Main St,Gift Card,Pending,TRK76960854,7,FREESHIP,Facebook,1199.72
+ORD200752,2024-10-03,C82217,Phone,4,429.37,299 Main St,Credit Card,Delivered,TRK33305694,8,FREESHIP,Google,1717.48
+ORD200753,2024-04-24,C42270,Phone,2,241.49,864 Main St,Debit Card,Returned,TRK72697796,7,FREESHIP,Instagram,482.98
+ORD200754,2025-05-31,C48846,Printer,2,452.05,983 Main St,Credit Card,Returned,TRK52804097,3,WINTER15,Email,904.1
+ORD200755,2023-06-13,C54160,Desk,3,336.71,658 Main St,Credit Card,Pending,TRK60515972,4,,Email,1010.13
+ORD200756,2024-06-27,C14080,Phone,1,283.69,202 Main St,Gift Card,Shipped,TRK93163682,6,,Google,283.69
+ORD200757,2024-02-22,C81074,Desk,1,157.72,597 Main St,Debit Card,Delivered,TRK91105190,2,FREESHIP,Google,157.72
+ORD200758,2023-03-26,C69021,Tablet,3,624.84,917 Main St,Credit Card,Cancelled,TRK57148510,8,WINTER15,Facebook,1874.52
+ORD200759,2023-07-24,C96283,Desk,3,308.01,366 Main St,Cash,Pending,TRK91784124,3,FREESHIP,Facebook,924.03
+ORD200760,2025-02-18,C96636,Desk,1,39.56,283 Main St,Debit Card,Cancelled,TRK73324346,5,,Google,39.56
+ORD200761,2023-06-02,C37235,Desk,4,37.76,217 Main St,Debit Card,Delivered,TRK67789367,7,,Google,151.04
+ORD200762,2024-09-17,C12444,Phone,3,76.96,611 Main St,Cash,Returned,TRK97621403,8,FREESHIP,Email,230.88
+ORD200763,2023-04-06,C79142,Laptop,1,569.96,533 Main St,Online,Delivered,TRK30915955,4,FREESHIP,Email,569.96
+ORD200764,2024-03-10,C35983,Laptop,5,627.43,806 Main St,Credit Card,Cancelled,TRK14016163,10,FREESHIP,Email,3137.15
+ORD200765,2023-10-06,C36150,Laptop,2,534.91,281 Main St,Debit Card,Returned,TRK96249043,5,SAVE10,Google,1069.82
+ORD200766,2023-01-22,C91454,Printer,2,278.88,494 Main St,Debit Card,Pending,TRK99985340,3,FREESHIP,Referral,557.76
+ORD200767,2025-04-18,C19368,Tablet,2,323.22,517 Main St,Credit Card,Delivered,TRK80436037,7,,Instagram,646.44
+ORD200768,2023-09-04,C35987,Tablet,5,653.46,165 Main St,Cash,Cancelled,TRK28918815,9,WINTER15,Email,3267.3
+ORD200769,2023-07-06,C13366,Printer,4,678.55,568 Main St,Cash,Delivered,TRK98691410,5,,Email,2714.2
+ORD200770,2024-02-11,C72166,Desk,1,314.38,227 Main St,Online,Returned,TRK67733444,6,,Google,314.38
+ORD200771,2024-06-12,C20357,Phone,3,692.44,272 Main St,Debit Card,Cancelled,TRK82236408,8,FREESHIP,Google,2077.32
+ORD200772,2024-07-28,C33802,Monitor,1,604.87,461 Main St,Online,Delivered,TRK25799478,4,,Instagram,604.87
+ORD200773,2025-06-28,C99205,Phone,2,512.33,415 Main St,Cash,Cancelled,TRK48904015,7,,Facebook,1024.66
+ORD200774,2025-04-15,C29701,Chair,3,20.54,257 Main St,Credit Card,Cancelled,TRK42266846,3,FREESHIP,Instagram,61.62
+ORD200775,2023-03-04,C73941,Phone,2,625.22,569 Main St,Online,Cancelled,TRK22051900,5,,Google,1250.44
+ORD200776,2023-08-21,C69168,Tablet,1,21.19,482 Main St,Cash,Returned,TRK10446197,5,WINTER15,Google,21.19
+ORD200777,2025-03-21,C66116,Chair,5,64.49,633 Main St,Online,Cancelled,TRK41967983,7,,Facebook,322.45
+ORD200778,2023-04-28,C85059,Laptop,4,246.85,316 Main St,Credit Card,Shipped,TRK56503740,8,WINTER15,Google,987.4
+ORD200779,2023-12-01,C18076,Phone,3,588.74,751 Main St,Debit Card,Pending,TRK26661705,8,FREESHIP,Email,1766.22
+ORD200780,2024-03-31,C41284,Laptop,4,184.48,661 Main St,Online,Cancelled,TRK73613128,4,WINTER15,Google,737.92
+ORD200781,2024-01-10,C43524,Phone,5,524.26,934 Main St,Gift Card,Delivered,TRK51479426,5,FREESHIP,Referral,2621.3
+ORD200782,2024-08-11,C58063,Monitor,2,493.63,167 Main St,Online,Returned,TRK50548869,6,SAVE10,Referral,987.26
+ORD200783,2025-05-26,C19937,Printer,1,438.34,281 Main St,Gift Card,Returned,TRK46990083,5,FREESHIP,Facebook,438.34
+ORD200784,2025-05-16,C21191,Laptop,1,325.81,232 Main St,Credit Card,Pending,TRK85771230,1,WINTER15,Referral,325.81
+ORD200785,2023-07-29,C45862,Chair,1,176.1,342 Main St,Credit Card,Pending,TRK53089983,1,SAVE10,Instagram,176.1
+ORD200786,2023-08-23,C39130,Chair,5,45.31,774 Main St,Online,Cancelled,TRK99583414,8,,Referral,226.55
+ORD200787,2024-03-17,C18167,Desk,4,221.96,193 Main St,Cash,Delivered,TRK36841089,7,,Google,887.84
+ORD200788,2023-11-02,C47307,Chair,2,601.43,761 Main St,Online,Pending,TRK43516112,5,FREESHIP,Instagram,1202.86
+ORD200789,2023-08-17,C57276,Tablet,5,691.28,183 Main St,Online,Delivered,TRK75899752,10,SAVE10,Email,3456.4
+ORD200790,2024-09-14,C38928,Laptop,4,417.89,302 Main St,Gift Card,Pending,TRK96636009,4,,Google,1671.56
+ORD200791,2024-01-13,C49710,Chair,4,409.28,956 Main St,Cash,Pending,TRK92591237,8,,Email,1637.12
+ORD200792,2023-06-16,C41709,Desk,2,356.35,746 Main St,Debit Card,Returned,TRK90995294,6,WINTER15,Facebook,712.7
+ORD200793,2024-04-15,C91255,Chair,5,170.22,769 Main St,Debit Card,Delivered,TRK69599961,8,,Referral,851.1
+ORD200794,2023-03-09,C76653,Printer,4,384.85,988 Main St,Online,Delivered,TRK77052196,9,FREESHIP,Instagram,1539.4
+ORD200795,2024-11-20,C95667,Laptop,4,115.77,586 Main St,Online,Pending,TRK41266666,7,SAVE10,Instagram,463.08
+ORD200796,2025-04-29,C33313,Phone,3,579.55,882 Main St,Gift Card,Returned,TRK13349970,8,WINTER15,Facebook,1738.65
+ORD200797,2023-02-27,C36825,Laptop,2,438.76,426 Main St,Debit Card,Returned,TRK72557318,2,,Facebook,877.52
+ORD200798,2025-05-19,C20861,Phone,5,488.35,968 Main St,Debit Card,Returned,TRK89372013,9,FREESHIP,Email,2441.75
+ORD200799,2023-04-16,C26364,Laptop,4,328.56,803 Main St,Debit Card,Returned,TRK78924436,4,FREESHIP,Email,1314.24
+ORD200800,2025-03-28,C34686,Tablet,1,68.39,412 Main St,Online,Returned,TRK99468332,3,WINTER15,Facebook,68.39
+ORD200801,2023-05-03,C97593,Printer,4,595.62,738 Main St,Debit Card,Pending,TRK58443593,8,FREESHIP,Facebook,2382.48
+ORD200802,2024-02-17,C84331,Chair,5,644.64,205 Main St,Gift Card,Cancelled,TRK34440714,6,FREESHIP,Email,3223.2
+ORD200803,2023-08-20,C88775,Monitor,5,397.81,223 Main St,Debit Card,Returned,TRK45098068,5,SAVE10,Referral,1989.05
+ORD200804,2024-01-01,C76362,Chair,3,236.5,916 Main St,Online,Delivered,TRK11868618,8,FREESHIP,Email,709.5
+ORD200805,2024-10-15,C59278,Laptop,5,472.01,178 Main St,Gift Card,Cancelled,TRK14590037,10,SAVE10,Email,2360.05
+ORD200806,2023-09-01,C55819,Chair,5,253.75,740 Main St,Online,Pending,TRK13775054,9,WINTER15,Instagram,1268.75
+ORD200807,2024-11-10,C82344,Monitor,3,676.21,260 Main St,Online,Delivered,TRK70957219,5,SAVE10,Google,2028.63
+ORD200808,2024-02-13,C65565,Desk,3,134.05,192 Main St,Credit Card,Shipped,TRK80383756,3,,Google,402.15
+ORD200809,2024-04-09,C80416,Desk,5,217.43,752 Main St,Debit Card,Shipped,TRK54385892,10,SAVE10,Instagram,1087.15
+ORD200810,2023-05-31,C23637,Tablet,1,553.56,644 Main St,Credit Card,Cancelled,TRK16749863,5,,Referral,553.56
+ORD200811,2023-11-05,C24769,Laptop,2,28.55,864 Main St,Gift Card,Shipped,TRK44538305,7,SAVE10,Email,57.1
+ORD200812,2024-01-26,C81547,Phone,2,255.26,803 Main St,Credit Card,Cancelled,TRK88437123,6,FREESHIP,Google,510.52
+ORD200813,2025-03-15,C12813,Laptop,5,292.54,263 Main St,Debit Card,Cancelled,TRK36131660,8,FREESHIP,Email,1462.7
+ORD200814,2024-12-11,C50732,Chair,4,147.51,979 Main St,Debit Card,Pending,TRK21082461,4,WINTER15,Instagram,590.04
+ORD200815,2024-08-04,C41320,Printer,3,569.84,920 Main St,Gift Card,Cancelled,TRK77539180,8,WINTER15,Instagram,1709.52
+ORD200816,2024-02-21,C55286,Tablet,5,574.79,497 Main St,Credit Card,Pending,TRK39058734,8,WINTER15,Referral,2873.95
+ORD200817,2023-10-05,C87994,Chair,4,598.19,430 Main St,Credit Card,Delivered,TRK98883971,7,WINTER15,Email,2392.76
+ORD200818,2023-03-02,C25580,Phone,4,390.84,860 Main St,Credit Card,Cancelled,TRK58781638,9,WINTER15,Referral,1563.36
+ORD200819,2024-09-28,C66196,Phone,2,398.45,650 Main St,Debit Card,Cancelled,TRK38104650,7,SAVE10,Google,796.9
+ORD200820,2023-05-27,C35377,Phone,5,623.81,171 Main St,Cash,Returned,TRK17342157,6,FREESHIP,Email,3119.05
+ORD200821,2024-12-14,C40771,Laptop,4,174.49,259 Main St,Credit Card,Delivered,TRK56310345,5,SAVE10,Facebook,697.96
+ORD200822,2025-03-15,C20624,Phone,1,479.56,923 Main St,Gift Card,Returned,TRK45123395,1,SAVE10,Google,479.56
+ORD200823,2024-10-07,C27070,Laptop,4,653.13,973 Main St,Credit Card,Shipped,TRK83842481,8,WINTER15,Instagram,2612.52
+ORD200824,2023-08-29,C18826,Monitor,3,481.1,664 Main St,Credit Card,Returned,TRK12530495,3,FREESHIP,Facebook,1443.3
+ORD200825,2025-03-26,C23899,Desk,5,271.69,543 Main St,Online,Returned,TRK88914760,7,FREESHIP,Instagram,1358.45
+ORD200826,2025-03-08,C43249,Printer,3,463.81,283 Main St,Online,Returned,TRK32469820,8,WINTER15,Email,1391.43
+ORD200827,2023-05-25,C95856,Tablet,2,639.88,432 Main St,Cash,Delivered,TRK58829625,5,WINTER15,Instagram,1279.76
+ORD200828,2024-07-24,C86266,Chair,4,404.58,510 Main St,Cash,Shipped,TRK64576020,5,FREESHIP,Instagram,1618.32
+ORD200829,2023-02-05,C39551,Monitor,1,76.93,685 Main St,Debit Card,Delivered,TRK68358007,6,WINTER15,Instagram,76.93
+ORD200830,2024-12-11,C90310,Tablet,4,190.64,853 Main St,Cash,Delivered,TRK70028457,5,SAVE10,Email,762.56
+ORD200831,2023-12-18,C20124,Printer,2,88.73,140 Main St,Online,Pending,TRK61346824,5,,Google,177.46
+ORD200832,2024-03-12,C63372,Chair,5,485.71,903 Main St,Online,Pending,TRK14661811,10,SAVE10,Referral,2428.55
+ORD200833,2025-03-14,C90595,Phone,5,78.29,508 Main St,Credit Card,Shipped,TRK96573803,5,WINTER15,Referral,391.45
+ORD200834,2024-04-11,C98483,Printer,5,22.14,456 Main St,Cash,Returned,TRK22084320,10,,Instagram,110.7
+ORD200835,2024-03-26,C16429,Desk,1,679.65,390 Main St,Debit Card,Shipped,TRK73888013,6,FREESHIP,Google,679.65
+ORD200836,2023-02-02,C31810,Phone,1,178.44,328 Main St,Credit Card,Cancelled,TRK58725886,2,FREESHIP,Google,178.44
+ORD200837,2025-06-14,C88029,Chair,5,655.55,282 Main St,Online,Delivered,TRK59701278,5,,Email,3277.75
+ORD200838,2024-04-11,C57798,Desk,4,577.08,384 Main St,Online,Pending,TRK68797566,8,,Facebook,2308.32
+ORD200839,2023-08-24,C82858,Chair,3,197.97,551 Main St,Online,Cancelled,TRK90618490,5,,Google,593.91
+ORD200840,2024-01-14,C60699,Chair,3,411.95,672 Main St,Credit Card,Delivered,TRK88660574,7,FREESHIP,Referral,1235.85
+ORD200841,2024-09-19,C94658,Printer,2,443.22,742 Main St,Credit Card,Delivered,TRK51732528,5,,Facebook,886.44
+ORD200842,2025-05-07,C78305,Laptop,3,364.14,396 Main St,Online,Pending,TRK88312618,7,WINTER15,Referral,1092.42
+ORD200843,2025-05-13,C43538,Desk,3,430.06,534 Main St,Gift Card,Cancelled,TRK20961563,8,FREESHIP,Instagram,1290.18
+ORD200844,2024-12-04,C47486,Chair,1,320.92,883 Main St,Online,Returned,TRK75984759,5,FREESHIP,Facebook,320.92
+ORD200845,2023-10-08,C24212,Phone,3,107.36,808 Main St,Gift Card,Delivered,TRK68894675,5,FREESHIP,Google,322.08
+ORD200846,2024-07-04,C24765,Desk,2,359.86,646 Main St,Debit Card,Cancelled,TRK43977698,4,,Referral,719.72
+ORD200847,2024-11-18,C48176,Printer,4,434.23,670 Main St,Online,Shipped,TRK90560300,8,FREESHIP,Email,1736.92
+ORD200848,2023-01-01,C54675,Chair,2,645.85,634 Main St,Online,Shipped,TRK18049633,5,,Referral,1291.7
+ORD200849,2025-06-09,C16675,Printer,4,214.35,664 Main St,Debit Card,Cancelled,TRK12756945,7,WINTER15,Referral,857.4
+ORD200850,2025-04-27,C38557,Monitor,3,638.5,890 Main St,Debit Card,Cancelled,TRK14832238,4,FREESHIP,Instagram,1915.5
+ORD200851,2023-12-12,C80183,Laptop,1,365.57,146 Main St,Online,Cancelled,TRK20814598,5,SAVE10,Email,365.57
+ORD200852,2024-10-24,C39530,Desk,3,568.05,618 Main St,Gift Card,Pending,TRK69000497,6,SAVE10,Google,1704.15
+ORD200853,2023-10-16,C10002,Printer,3,490.01,894 Main St,Cash,Returned,TRK94641152,4,SAVE10,Facebook,1470.03
+ORD200854,2025-06-13,C56938,Laptop,3,372.6,356 Main St,Credit Card,Delivered,TRK67735987,7,WINTER15,Referral,1117.8
+ORD200855,2023-05-25,C41331,Monitor,5,240.61,785 Main St,Credit Card,Shipped,TRK94198179,10,FREESHIP,Email,1203.05
+ORD200856,2024-06-03,C94698,Phone,1,586.62,871 Main St,Debit Card,Shipped,TRK95768773,5,,Facebook,586.62
+ORD200857,2024-03-10,C56506,Phone,3,257.84,185 Main St,Online,Delivered,TRK86808324,4,,Instagram,773.52
+ORD200858,2023-08-20,C22167,Tablet,5,435.66,891 Main St,Online,Pending,TRK70269748,9,,Facebook,2178.3
+ORD200859,2024-08-28,C11127,Chair,5,261.33,154 Main St,Credit Card,Returned,TRK73285507,5,SAVE10,Referral,1306.65
+ORD200860,2024-01-23,C69542,Printer,1,422.54,876 Main St,Cash,Delivered,TRK20746505,1,SAVE10,Google,422.54
+ORD200861,2023-03-19,C93276,Desk,5,330.45,230 Main St,Gift Card,Shipped,TRK44165913,10,FREESHIP,Google,1652.25
+ORD200862,2023-12-02,C37969,Desk,3,120.82,799 Main St,Credit Card,Shipped,TRK69852386,5,SAVE10,Referral,362.46
+ORD200863,2024-05-20,C98276,Phone,1,14.06,471 Main St,Credit Card,Pending,TRK74207282,5,SAVE10,Referral,14.06
+ORD200864,2023-05-03,C14240,Desk,1,491.11,592 Main St,Credit Card,Delivered,TRK58095246,4,SAVE10,Facebook,491.11
+ORD200865,2023-04-30,C72241,Monitor,4,677.37,156 Main St,Cash,Pending,TRK76270481,8,SAVE10,Google,2709.48
+ORD200866,2024-07-26,C39664,Desk,5,189.25,693 Main St,Debit Card,Cancelled,TRK39917741,10,WINTER15,Email,946.25
+ORD200867,2024-05-26,C53252,Printer,4,142.58,351 Main St,Cash,Delivered,TRK65831261,4,FREESHIP,Facebook,570.32
+ORD200868,2024-06-29,C70452,Monitor,4,316.32,309 Main St,Debit Card,Delivered,TRK42985882,7,,Facebook,1265.28
+ORD200869,2024-03-17,C29905,Desk,2,533.95,790 Main St,Online,Delivered,TRK16788127,5,WINTER15,Google,1067.9
+ORD200870,2025-06-01,C78725,Phone,4,470.09,541 Main St,Debit Card,Delivered,TRK72001139,4,FREESHIP,Google,1880.36
+ORD200871,2024-05-16,C93768,Tablet,3,324.3,720 Main St,Debit Card,Pending,TRK22024707,8,FREESHIP,Email,972.9
+ORD200872,2023-07-10,C59169,Chair,4,629.34,172 Main St,Cash,Shipped,TRK90883858,7,,Email,2517.36
+ORD200873,2024-05-12,C53488,Desk,3,136.84,448 Main St,Cash,Delivered,TRK27365050,3,SAVE10,Facebook,410.52
+ORD200874,2023-10-31,C92180,Chair,2,488.9,632 Main St,Cash,Delivered,TRK93315929,7,FREESHIP,Facebook,977.8
+ORD200875,2023-08-03,C25918,Laptop,5,133.39,203 Main St,Credit Card,Delivered,TRK66473392,6,FREESHIP,Referral,666.95
+ORD200876,2024-06-09,C90363,Chair,5,608.91,200 Main St,Gift Card,Pending,TRK21534173,6,SAVE10,Google,3044.55
+ORD200877,2024-07-25,C43867,Tablet,1,524.06,269 Main St,Debit Card,Pending,TRK97319127,3,FREESHIP,Email,524.06
+ORD200878,2023-06-01,C73873,Desk,2,330.69,393 Main St,Online,Cancelled,TRK56423132,5,SAVE10,Google,661.38
+ORD200879,2025-04-08,C56622,Phone,2,547.67,932 Main St,Gift Card,Shipped,TRK86373987,3,,Instagram,1095.34
+ORD200880,2025-03-12,C85074,Laptop,4,233.7,506 Main St,Online,Shipped,TRK63133878,8,SAVE10,Facebook,934.8
+ORD200881,2023-01-03,C59579,Tablet,2,448.85,386 Main St,Credit Card,Pending,TRK48000034,6,,Instagram,897.7
+ORD200882,2025-06-28,C43335,Phone,2,274.12,533 Main St,Cash,Delivered,TRK91848650,6,FREESHIP,Referral,548.24
+ORD200883,2025-05-13,C43595,Printer,5,561.48,451 Main St,Online,Delivered,TRK25317348,9,FREESHIP,Facebook,2807.4
+ORD200884,2024-05-15,C71471,Chair,1,595.54,817 Main St,Gift Card,Shipped,TRK52137079,4,,Instagram,595.54
+ORD200885,2024-04-07,C61090,Laptop,4,515.59,387 Main St,Credit Card,Shipped,TRK36388962,7,FREESHIP,Google,2062.36
+ORD200886,2023-10-25,C29620,Phone,1,460.13,792 Main St,Credit Card,Returned,TRK22046456,1,,Google,460.13
+ORD200887,2024-12-19,C67932,Chair,3,171.66,857 Main St,Debit Card,Delivered,TRK88547534,7,,Google,514.98
+ORD200888,2024-07-23,C14427,Laptop,2,266.95,833 Main St,Credit Card,Pending,TRK58024529,3,,Instagram,533.9
+ORD200889,2024-10-27,C36725,Monitor,5,650.72,350 Main St,Credit Card,Cancelled,TRK16808790,8,WINTER15,Email,3253.6
+ORD200890,2023-08-11,C51921,Laptop,3,439.53,943 Main St,Debit Card,Pending,TRK85741716,5,,Google,1318.59
+ORD200891,2023-11-11,C36534,Monitor,3,654.54,918 Main St,Cash,Returned,TRK38952138,7,SAVE10,Referral,1963.62
+ORD200892,2024-06-04,C72043,Desk,1,394.53,480 Main St,Cash,Shipped,TRK40896408,2,FREESHIP,Referral,394.53
+ORD200893,2023-03-21,C99533,Monitor,1,678.01,696 Main St,Cash,Pending,TRK55701253,4,FREESHIP,Referral,678.01
+ORD200894,2023-05-23,C90852,Tablet,3,575.01,852 Main St,Online,Cancelled,TRK37551831,8,WINTER15,Instagram,1725.03
+ORD200895,2023-11-09,C81882,Chair,3,154.64,832 Main St,Debit Card,Pending,TRK62371264,6,WINTER15,Facebook,463.92
+ORD200896,2024-10-18,C85466,Desk,3,147.29,102 Main St,Gift Card,Shipped,TRK66764177,3,FREESHIP,Google,441.87
+ORD200897,2024-09-03,C87995,Laptop,4,481.48,358 Main St,Gift Card,Delivered,TRK38730545,5,SAVE10,Instagram,1925.92
+ORD200898,2025-03-05,C44619,Monitor,3,158.37,742 Main St,Cash,Shipped,TRK66662528,6,,Referral,475.11
+ORD200899,2025-04-23,C99904,Printer,2,323.37,552 Main St,Online,Pending,TRK83843411,3,SAVE10,Instagram,646.74
+ORD200900,2025-02-07,C52342,Laptop,5,73.83,991 Main St,Debit Card,Pending,TRK67342586,9,,Instagram,369.15
+ORD200901,2024-04-28,C44277,Tablet,1,458.63,839 Main St,Debit Card,Returned,TRK79321479,4,WINTER15,Referral,458.63
+ORD200902,2024-07-13,C61162,Monitor,4,180.25,813 Main St,Debit Card,Cancelled,TRK76712124,7,,Facebook,721
+ORD200903,2023-05-17,C80868,Monitor,3,473.49,205 Main St,Credit Card,Pending,TRK56186636,7,,Email,1420.47
+ORD200904,2025-02-05,C16693,Monitor,4,237.43,262 Main St,Cash,Cancelled,TRK41146508,8,WINTER15,Referral,949.72
+ORD200905,2023-11-23,C67818,Laptop,1,442.39,101 Main St,Gift Card,Pending,TRK81978113,6,FREESHIP,Facebook,442.39
+ORD200906,2024-09-03,C49938,Monitor,1,62.12,141 Main St,Cash,Returned,TRK80175572,2,,Email,62.12
+ORD200907,2024-08-04,C90898,Desk,5,298.39,583 Main St,Gift Card,Cancelled,TRK52935170,7,WINTER15,Referral,1491.95
+ORD200908,2025-05-06,C35117,Desk,2,697.93,332 Main St,Credit Card,Cancelled,TRK27155709,2,SAVE10,Google,1395.86
+ORD200909,2024-05-27,C60203,Tablet,2,291.85,569 Main St,Cash,Shipped,TRK76525279,5,FREESHIP,Instagram,583.7
+ORD200910,2024-05-31,C36174,Printer,3,308.98,348 Main St,Cash,Delivered,TRK26397548,3,SAVE10,Instagram,926.94
+ORD200911,2024-08-13,C80872,Desk,5,396.86,593 Main St,Cash,Cancelled,TRK43967487,9,SAVE10,Instagram,1984.3
+ORD200912,2024-01-22,C67604,Desk,2,139.69,318 Main St,Online,Returned,TRK85545920,7,FREESHIP,Email,279.38
+ORD200913,2023-02-16,C45599,Printer,5,475.95,505 Main St,Credit Card,Returned,TRK62277685,8,WINTER15,Facebook,2379.75
+ORD200914,2025-02-10,C70352,Desk,1,626.6,955 Main St,Gift Card,Returned,TRK51589589,4,WINTER15,Facebook,626.6
+ORD200915,2024-02-16,C20643,Laptop,4,502.99,939 Main St,Debit Card,Shipped,TRK30736692,4,WINTER15,Referral,2011.96
+ORD200916,2024-06-21,C35669,Printer,5,578.83,165 Main St,Cash,Returned,TRK13928455,6,,Referral,2894.15
+ORD200917,2025-01-20,C65524,Laptop,5,383.82,836 Main St,Credit Card,Returned,TRK19315310,7,FREESHIP,Google,1919.1
+ORD200918,2025-06-24,C74359,Laptop,5,368.25,706 Main St,Online,Delivered,TRK18250450,5,,Instagram,1841.25
+ORD200919,2025-02-07,C92086,Printer,2,374.6,187 Main St,Online,Shipped,TRK23357668,3,FREESHIP,Referral,749.2
+ORD200920,2025-03-12,C26137,Tablet,2,428.09,978 Main St,Credit Card,Returned,TRK98110407,6,,Instagram,856.18
+ORD200921,2023-07-24,C90573,Tablet,1,438.93,144 Main St,Gift Card,Cancelled,TRK90075720,3,SAVE10,Referral,438.93
+ORD200922,2024-06-17,C81857,Desk,2,563.82,487 Main St,Credit Card,Pending,TRK79737732,3,,Instagram,1127.64
+ORD200923,2023-02-11,C91582,Printer,3,649.93,836 Main St,Credit Card,Pending,TRK99938245,7,WINTER15,Facebook,1949.79
+ORD200924,2025-03-22,C81319,Printer,5,268.43,991 Main St,Cash,Returned,TRK55330558,5,SAVE10,Email,1342.15
+ORD200925,2024-12-20,C78500,Monitor,5,502.47,304 Main St,Online,Shipped,TRK97460884,10,WINTER15,Email,2512.35
+ORD200926,2024-03-20,C67533,Desk,1,26.95,672 Main St,Cash,Delivered,TRK14566395,1,WINTER15,Email,26.95
+ORD200927,2023-02-14,C35566,Laptop,4,64.69,638 Main St,Debit Card,Shipped,TRK10003020,7,WINTER15,Google,258.76
+ORD200928,2024-05-09,C77166,Laptop,3,247.11,821 Main St,Debit Card,Returned,TRK18896595,3,WINTER15,Referral,741.33
+ORD200929,2024-10-16,C67936,Tablet,2,536.25,553 Main St,Debit Card,Pending,TRK71803414,3,,Email,1072.5
+ORD200930,2024-12-16,C59554,Phone,2,456.04,382 Main St,Debit Card,Returned,TRK28182447,4,FREESHIP,Email,912.08
+ORD200931,2024-01-01,C14005,Printer,2,40.23,623 Main St,Credit Card,Cancelled,TRK87567926,4,SAVE10,Google,80.46
+ORD200932,2023-03-26,C26118,Laptop,2,72.39,168 Main St,Online,Delivered,TRK15334251,7,WINTER15,Instagram,144.78
+ORD200933,2023-01-26,C59685,Monitor,2,394.16,255 Main St,Online,Shipped,TRK43718093,2,,Referral,788.32
+ORD200934,2025-06-01,C40304,Laptop,4,119.84,692 Main St,Gift Card,Shipped,TRK85790948,8,FREESHIP,Referral,479.36
+ORD200935,2023-11-24,C39593,Phone,3,692.71,398 Main St,Credit Card,Delivered,TRK62405253,3,FREESHIP,Instagram,2078.13
+ORD200936,2024-01-12,C50612,Chair,4,56.66,737 Main St,Online,Delivered,TRK44140968,4,SAVE10,Instagram,226.64
+ORD200937,2024-01-16,C39791,Chair,2,298.53,536 Main St,Debit Card,Cancelled,TRK46221436,5,WINTER15,Email,597.06
+ORD200938,2023-07-12,C39017,Chair,3,331.46,696 Main St,Credit Card,Cancelled,TRK91155214,6,WINTER15,Referral,994.38
+ORD200939,2025-04-16,C48510,Laptop,2,521.4,212 Main St,Cash,Delivered,TRK53152886,7,SAVE10,Instagram,1042.8
+ORD200940,2023-03-27,C74003,Printer,4,305.32,679 Main St,Online,Cancelled,TRK91525779,4,SAVE10,Google,1221.28
+ORD200941,2023-07-17,C91155,Printer,5,111.7,599 Main St,Credit Card,Cancelled,TRK82162952,9,FREESHIP,Email,558.5
+ORD200942,2023-09-29,C17591,Tablet,1,479.76,882 Main St,Credit Card,Pending,TRK56070470,1,,Email,479.76
+ORD200943,2023-12-27,C43330,Monitor,3,193.49,355 Main St,Gift Card,Returned,TRK71594838,6,FREESHIP,Facebook,580.47
+ORD200944,2024-12-16,C32687,Laptop,2,426.22,448 Main St,Online,Delivered,TRK98284560,7,WINTER15,Google,852.44
+ORD200945,2023-08-20,C79722,Tablet,5,276.44,619 Main St,Gift Card,Shipped,TRK29976438,10,FREESHIP,Referral,1382.2
+ORD200946,2024-05-04,C65021,Phone,2,404.96,546 Main St,Cash,Shipped,TRK20626179,4,SAVE10,Email,809.92
+ORD200947,2023-09-07,C85520,Phone,4,465.66,119 Main St,Online,Returned,TRK65994177,9,FREESHIP,Email,1862.64
+ORD200948,2024-06-21,C94569,Phone,2,594.07,739 Main St,Gift Card,Cancelled,TRK79269291,2,,Google,1188.14
+ORD200949,2023-11-09,C55778,Desk,5,110.38,319 Main St,Cash,Pending,TRK93797108,10,,Referral,551.9
+ORD200950,2024-05-31,C19722,Laptop,1,596.24,891 Main St,Credit Card,Returned,TRK78094361,4,FREESHIP,Instagram,596.24
+ORD200951,2024-07-22,C74928,Printer,2,306.24,589 Main St,Online,Returned,TRK39845914,4,FREESHIP,Email,612.48
+ORD200952,2025-02-27,C49111,Monitor,3,503.39,225 Main St,Online,Pending,TRK45303393,5,,Facebook,1510.17
+ORD200953,2023-02-06,C43721,Phone,1,131.61,971 Main St,Cash,Shipped,TRK89392104,2,FREESHIP,Facebook,131.61
+ORD200954,2024-10-22,C68609,Chair,3,443.44,240 Main St,Gift Card,Shipped,TRK58273778,3,FREESHIP,Google,1330.32
+ORD200955,2023-01-23,C82068,Chair,1,408.13,164 Main St,Gift Card,Shipped,TRK25779180,3,WINTER15,Instagram,408.13
+ORD200956,2024-04-11,C21191,Phone,2,160.98,381 Main St,Debit Card,Delivered,TRK86246309,3,SAVE10,Referral,321.96
+ORD200957,2023-01-12,C73575,Monitor,5,643.89,851 Main St,Cash,Returned,TRK23387612,8,WINTER15,Facebook,3219.45
+ORD200958,2023-05-13,C82685,Desk,3,158.66,537 Main St,Gift Card,Delivered,TRK70184320,7,WINTER15,Email,475.98
+ORD200959,2024-04-13,C73996,Tablet,2,143.82,856 Main St,Credit Card,Returned,TRK74579570,6,SAVE10,Instagram,287.64
+ORD200960,2023-12-11,C87687,Laptop,3,379.07,312 Main St,Gift Card,Pending,TRK60383805,3,WINTER15,Google,1137.21
+ORD200961,2024-11-11,C55464,Phone,1,601.36,532 Main St,Online,Shipped,TRK81178598,1,,Facebook,601.36
+ORD200962,2024-09-06,C12459,Phone,2,142.08,838 Main St,Gift Card,Delivered,TRK30674085,4,SAVE10,Referral,284.16
+ORD200963,2024-03-11,C88075,Chair,5,530.34,970 Main St,Online,Shipped,TRK42832976,9,FREESHIP,Google,2651.7
+ORD200964,2023-08-20,C18583,Phone,5,364.42,778 Main St,Credit Card,Cancelled,TRK43084595,10,SAVE10,Referral,1822.1
+ORD200965,2025-06-18,C70412,Laptop,4,578.28,791 Main St,Gift Card,Cancelled,TRK22192783,5,FREESHIP,Email,2313.12
+ORD200966,2025-05-20,C58503,Monitor,5,280.52,290 Main St,Credit Card,Cancelled,TRK12981657,7,WINTER15,Facebook,1402.6
+ORD200967,2025-05-06,C52879,Tablet,5,638.92,502 Main St,Credit Card,Returned,TRK67403284,5,FREESHIP,Google,3194.6
+ORD200968,2024-02-08,C67870,Monitor,4,412.2,664 Main St,Credit Card,Shipped,TRK72602178,6,WINTER15,Referral,1648.8
+ORD200969,2025-06-05,C19439,Desk,1,440.34,675 Main St,Gift Card,Shipped,TRK25383993,2,WINTER15,Facebook,440.34
+ORD200970,2024-09-07,C72664,Desk,1,627.15,241 Main St,Cash,Delivered,TRK86694331,5,SAVE10,Instagram,627.15
+ORD200971,2024-05-27,C32650,Monitor,2,605.26,934 Main St,Cash,Cancelled,TRK66648743,4,WINTER15,Referral,1210.52
+ORD200972,2024-06-09,C66438,Laptop,1,90.27,816 Main St,Cash,Delivered,TRK32035271,5,SAVE10,Facebook,90.27
+ORD200973,2025-06-09,C70010,Desk,5,230.77,141 Main St,Online,Pending,TRK50594008,10,WINTER15,Referral,1153.85
+ORD200974,2023-09-27,C30722,Desk,5,266.78,274 Main St,Gift Card,Cancelled,TRK52088168,5,,Email,1333.9
+ORD200975,2023-05-18,C70529,Desk,1,105.92,974 Main St,Gift Card,Returned,TRK82165408,6,SAVE10,Email,105.92
+ORD200976,2024-04-04,C18984,Tablet,3,589.3,650 Main St,Credit Card,Returned,TRK49298239,6,WINTER15,Referral,1767.9
+ORD200977,2023-01-28,C85841,Chair,4,649.47,608 Main St,Cash,Pending,TRK99820544,8,SAVE10,Google,2597.88
+ORD200978,2024-06-25,C41508,Printer,4,107.49,993 Main St,Cash,Delivered,TRK61047536,5,,Google,429.96
+ORD200979,2023-05-31,C75018,Monitor,3,669.06,299 Main St,Cash,Delivered,TRK51794806,7,SAVE10,Facebook,2007.18
+ORD200980,2023-10-14,C84320,Chair,3,69.65,107 Main St,Cash,Delivered,TRK81093218,7,WINTER15,Instagram,208.95
+ORD200981,2023-11-26,C12609,Phone,4,136.83,490 Main St,Debit Card,Pending,TRK56379337,8,SAVE10,Email,547.32
+ORD200982,2024-09-06,C64935,Monitor,1,304.11,707 Main St,Gift Card,Shipped,TRK42969065,2,SAVE10,Referral,304.11
+ORD200983,2024-11-24,C67528,Monitor,4,296.28,110 Main St,Gift Card,Shipped,TRK60865210,5,SAVE10,Email,1185.12
+ORD200984,2025-02-28,C44176,Desk,1,77.64,706 Main St,Credit Card,Shipped,TRK68704764,1,FREESHIP,Facebook,77.64
+ORD200985,2024-07-20,C92788,Desk,1,243.71,948 Main St,Gift Card,Delivered,TRK83835361,6,SAVE10,Google,243.71
+ORD200986,2024-09-07,C69213,Laptop,4,644.96,533 Main St,Credit Card,Pending,TRK67837331,7,FREESHIP,Email,2579.84
+ORD200987,2025-06-05,C67387,Phone,5,283.73,436 Main St,Gift Card,Pending,TRK54120003,8,FREESHIP,Instagram,1418.65
+ORD200988,2025-02-04,C90318,Desk,2,629.56,818 Main St,Gift Card,Cancelled,TRK52765043,5,WINTER15,Instagram,1259.12
+ORD200989,2023-03-23,C49995,Laptop,4,246.11,559 Main St,Credit Card,Pending,TRK33212013,4,SAVE10,Instagram,984.44
+ORD200990,2023-11-19,C52313,Phone,2,418.26,913 Main St,Debit Card,Pending,TRK67368559,2,SAVE10,Google,836.52
+ORD200991,2024-05-09,C10211,Desk,5,127.18,598 Main St,Debit Card,Cancelled,TRK68938335,10,FREESHIP,Google,635.9
+ORD200992,2024-08-27,C97907,Printer,3,586.21,933 Main St,Gift Card,Pending,TRK89637569,4,WINTER15,Referral,1758.63
+ORD200993,2024-04-06,C61384,Monitor,3,267.45,576 Main St,Gift Card,Delivered,TRK33323210,5,WINTER15,Instagram,802.35
+ORD200994,2024-06-27,C27613,Tablet,4,615.65,971 Main St,Debit Card,Delivered,TRK63701318,9,WINTER15,Google,2462.6
+ORD200995,2023-11-18,C99271,Monitor,2,113.29,959 Main St,Cash,Pending,TRK87832736,5,SAVE10,Facebook,226.58
+ORD200996,2024-04-28,C28648,Monitor,4,473.86,101 Main St,Debit Card,Delivered,TRK92240846,7,SAVE10,Facebook,1895.44
+ORD200997,2023-11-27,C26210,Laptop,3,444.75,805 Main St,Cash,Delivered,TRK40616861,6,SAVE10,Facebook,1334.25
+ORD200998,2023-05-19,C90350,Phone,2,183.67,783 Main St,Debit Card,Cancelled,TRK22824230,6,SAVE10,Google,367.34
+ORD200999,2023-12-24,C61957,Printer,1,483.38,652 Main St,Cash,Pending,TRK43983841,6,FREESHIP,Google,483.38
+ORD201000,2023-06-21,C90132,Printer,5,260.93,582 Main St,Online,Delivered,TRK52664903,9,SAVE10,Email,1304.65
+ORD201001,2023-12-08,C31371,Printer,2,253.68,122 Main St,Gift Card,Shipped,TRK19554327,6,,Referral,507.36
+ORD201002,2025-06-19,C83911,Tablet,4,699.88,944 Main St,Cash,Pending,TRK33188106,5,WINTER15,Referral,2799.52
+ORD201003,2023-01-11,C84700,Printer,5,319.97,582 Main St,Cash,Shipped,TRK14706969,7,SAVE10,Google,1599.85
+ORD201004,2025-06-09,C87529,Chair,4,246.91,296 Main St,Online,Pending,TRK15739505,8,SAVE10,Referral,987.64
+ORD201005,2023-03-02,C38065,Printer,3,392.85,426 Main St,Credit Card,Returned,TRK11448295,6,,Google,1178.55
+ORD201006,2024-05-27,C27435,Tablet,5,420.98,860 Main St,Cash,Delivered,TRK91458233,7,SAVE10,Facebook,2104.9
+ORD201007,2024-03-20,C46651,Monitor,2,73.26,839 Main St,Cash,Pending,TRK60444502,4,WINTER15,Facebook,146.52
+ORD201008,2023-01-13,C62557,Monitor,3,410.88,257 Main St,Cash,Delivered,TRK12742366,8,FREESHIP,Instagram,1232.64
+ORD201009,2023-09-02,C54494,Tablet,2,176.46,696 Main St,Credit Card,Delivered,TRK95958645,2,FREESHIP,Email,352.92
+ORD201010,2023-03-31,C33729,Monitor,3,659.57,533 Main St,Credit Card,Cancelled,TRK35649833,6,SAVE10,Email,1978.71
+ORD201011,2024-12-03,C47823,Phone,2,478.36,654 Main St,Online,Shipped,TRK22271097,3,,Google,956.72
+ORD201012,2024-12-03,C84570,Printer,4,30.05,301 Main St,Online,Returned,TRK12551882,6,,Facebook,120.2
+ORD201013,2025-04-26,C91123,Laptop,4,300.56,842 Main St,Cash,Cancelled,TRK49568409,9,FREESHIP,Facebook,1202.24
+ORD201014,2024-02-04,C92548,Tablet,5,226.45,160 Main St,Debit Card,Returned,TRK21682892,6,FREESHIP,Email,1132.25
+ORD201015,2024-01-26,C97454,Printer,2,349.4,892 Main St,Online,Shipped,TRK73249329,2,SAVE10,Instagram,698.8
+ORD201016,2023-12-29,C20257,Tablet,5,268.78,669 Main St,Debit Card,Delivered,TRK62135578,7,WINTER15,Email,1343.9
+ORD201017,2024-08-25,C51694,Chair,2,680.85,953 Main St,Gift Card,Delivered,TRK83122112,6,FREESHIP,Referral,1361.7
+ORD201018,2023-07-08,C77499,Laptop,3,182.48,209 Main St,Cash,Delivered,TRK20703086,3,,Instagram,547.44
+ORD201019,2024-04-06,C28386,Desk,1,277.09,293 Main St,Cash,Returned,TRK32954229,2,SAVE10,Referral,277.09
+ORD201020,2024-04-22,C50211,Tablet,2,26.5,312 Main St,Online,Delivered,TRK47787981,3,SAVE10,Instagram,53
+ORD201021,2023-10-23,C74519,Phone,3,315.27,309 Main St,Credit Card,Cancelled,TRK97351945,4,SAVE10,Email,945.81
+ORD201022,2025-02-24,C19071,Tablet,3,450.98,396 Main St,Credit Card,Shipped,TRK66537096,8,SAVE10,Referral,1352.94
+ORD201023,2024-09-23,C65251,Laptop,5,233.67,291 Main St,Cash,Shipped,TRK32059025,10,,Referral,1168.35
+ORD201024,2024-01-29,C90612,Chair,3,367.75,731 Main St,Cash,Pending,TRK93022878,7,FREESHIP,Facebook,1103.25
+ORD201025,2025-05-17,C28406,Chair,1,23.53,174 Main St,Gift Card,Delivered,TRK98841457,2,FREESHIP,Instagram,23.53
+ORD201026,2023-05-01,C55454,Monitor,1,677.48,807 Main St,Online,Delivered,TRK13281370,1,WINTER15,Facebook,677.48
+ORD201027,2024-05-21,C93467,Laptop,4,554.83,983 Main St,Cash,Returned,TRK77377373,6,,Google,2219.32
+ORD201028,2023-02-17,C60042,Desk,4,440.31,610 Main St,Cash,Cancelled,TRK84651559,6,,Instagram,1761.24
+ORD201029,2025-03-01,C44733,Desk,1,87.06,851 Main St,Credit Card,Shipped,TRK41500198,4,FREESHIP,Email,87.06
+ORD201030,2023-10-02,C61773,Phone,4,245.28,176 Main St,Credit Card,Delivered,TRK12936357,6,WINTER15,Email,981.12
+ORD201031,2023-02-28,C59183,Phone,5,664.51,136 Main St,Debit Card,Pending,TRK18129706,8,SAVE10,Email,3322.55
+ORD201032,2023-04-20,C26188,Chair,1,618.68,990 Main St,Online,Delivered,TRK61634201,6,WINTER15,Referral,618.68
+ORD201033,2024-12-24,C20338,Monitor,1,370.85,331 Main St,Gift Card,Delivered,TRK30654048,2,FREESHIP,Referral,370.85
+ORD201034,2024-06-16,C84524,Printer,4,517.98,766 Main St,Cash,Cancelled,TRK76751888,8,FREESHIP,Facebook,2071.92
+ORD201035,2023-11-12,C70315,Laptop,4,506.11,911 Main St,Cash,Cancelled,TRK97732085,5,,Referral,2024.44
+ORD201036,2024-05-31,C98278,Phone,3,413.83,552 Main St,Gift Card,Shipped,TRK49684737,8,SAVE10,Facebook,1241.49
+ORD201037,2023-12-13,C32347,Printer,1,249.81,408 Main St,Cash,Pending,TRK54073964,1,SAVE10,Google,249.81
+ORD201038,2025-03-15,C77961,Tablet,3,362.53,422 Main St,Debit Card,Returned,TRK28969024,5,,Facebook,1087.59
+ORD201039,2025-06-28,C49137,Desk,2,299.23,177 Main St,Credit Card,Cancelled,TRK79362428,2,WINTER15,Instagram,598.46
+ORD201040,2023-11-15,C13169,Tablet,1,536.07,932 Main St,Debit Card,Delivered,TRK66288666,5,FREESHIP,Google,536.07
+ORD201041,2023-02-11,C21167,Monitor,4,558.9,948 Main St,Gift Card,Shipped,TRK97737564,9,WINTER15,Google,2235.6
+ORD201042,2024-12-09,C59724,Tablet,2,409.75,414 Main St,Debit Card,Shipped,TRK67878272,2,WINTER15,Facebook,819.5
+ORD201043,2025-01-11,C43965,Tablet,2,179.96,675 Main St,Gift Card,Shipped,TRK94346739,5,,Instagram,359.92
+ORD201044,2025-06-22,C63018,Printer,1,38.49,215 Main St,Credit Card,Delivered,TRK52335337,4,FREESHIP,Referral,38.49
+ORD201045,2024-09-20,C11893,Laptop,5,316.4,671 Main St,Gift Card,Returned,TRK72012758,7,,Email,1582
+ORD201046,2024-10-07,C85421,Tablet,3,547.15,466 Main St,Online,Shipped,TRK16524006,4,WINTER15,Instagram,1641.45
+ORD201047,2023-06-23,C81726,Chair,4,540.34,394 Main St,Gift Card,Shipped,TRK69872994,6,WINTER15,Referral,2161.36
+ORD201048,2024-09-09,C57601,Monitor,4,73.65,889 Main St,Debit Card,Shipped,TRK21153699,9,,Google,294.6
+ORD201049,2024-07-18,C60575,Desk,5,391.86,587 Main St,Credit Card,Shipped,TRK44468232,6,,Instagram,1959.3
+ORD201050,2023-08-20,C70659,Laptop,5,69.7,722 Main St,Online,Returned,TRK49663597,9,,Instagram,348.5
+ORD201051,2025-03-05,C35043,Monitor,5,26.43,820 Main St,Gift Card,Shipped,TRK65097450,5,FREESHIP,Facebook,132.15
+ORD201052,2023-09-11,C12301,Tablet,1,531.74,493 Main St,Online,Shipped,TRK25145796,1,WINTER15,Google,531.74
+ORD201053,2024-09-15,C32798,Phone,2,496.62,679 Main St,Online,Pending,TRK37375451,2,SAVE10,Instagram,993.24
+ORD201054,2023-11-29,C42949,Printer,1,660.66,447 Main St,Debit Card,Delivered,TRK46415143,3,WINTER15,Instagram,660.66
+ORD201055,2023-10-23,C10787,Monitor,4,274.82,932 Main St,Debit Card,Delivered,TRK91512567,9,WINTER15,Email,1099.28
+ORD201056,2024-06-14,C26152,Phone,2,486.35,790 Main St,Online,Pending,TRK49382455,6,SAVE10,Referral,972.7
+ORD201057,2024-09-24,C46210,Laptop,3,428.88,535 Main St,Debit Card,Shipped,TRK81611937,3,WINTER15,Facebook,1286.64
+ORD201058,2023-09-08,C32943,Desk,2,412.14,127 Main St,Credit Card,Returned,TRK26949106,2,FREESHIP,Instagram,824.28
+ORD201059,2024-09-22,C73629,Desk,1,265.64,601 Main St,Credit Card,Returned,TRK11492924,3,WINTER15,Instagram,265.64
+ORD201060,2024-05-07,C38024,Tablet,2,273.43,824 Main St,Cash,Shipped,TRK93370912,7,WINTER15,Referral,546.86
+ORD201061,2025-01-29,C25445,Laptop,5,131.7,830 Main St,Cash,Shipped,TRK12402431,8,FREESHIP,Google,658.5
+ORD201062,2023-08-23,C13501,Chair,5,85.52,301 Main St,Gift Card,Cancelled,TRK65149372,5,,Facebook,427.6
+ORD201063,2024-06-19,C42108,Desk,2,320.68,336 Main St,Credit Card,Shipped,TRK58407918,5,FREESHIP,Referral,641.36
+ORD201064,2025-02-12,C32121,Laptop,4,198.81,654 Main St,Cash,Returned,TRK96074264,9,FREESHIP,Referral,795.24
+ORD201065,2023-10-30,C47778,Printer,5,666.8,488 Main St,Debit Card,Delivered,TRK79504329,7,SAVE10,Referral,3334
+ORD201066,2023-12-20,C10791,Desk,1,355.09,674 Main St,Debit Card,Cancelled,TRK20321248,5,SAVE10,Instagram,355.09
+ORD201067,2023-06-06,C78959,Phone,2,316.2,384 Main St,Online,Returned,TRK37426359,2,,Instagram,632.4
+ORD201068,2024-08-03,C29914,Laptop,1,133.39,469 Main St,Debit Card,Shipped,TRK22073506,2,SAVE10,Referral,133.39
+ORD201069,2023-02-25,C70506,Monitor,1,454.23,255 Main St,Gift Card,Returned,TRK12518384,3,,Facebook,454.23
+ORD201070,2024-09-06,C46873,Desk,4,491.29,496 Main St,Debit Card,Pending,TRK10926575,6,,Email,1965.16
+ORD201071,2025-06-24,C94037,Phone,2,255.14,216 Main St,Cash,Shipped,TRK47536985,2,,Google,510.28
+ORD201072,2023-02-26,C88644,Monitor,1,392.61,977 Main St,Gift Card,Cancelled,TRK14900878,4,SAVE10,Referral,392.61
+ORD201073,2024-10-11,C69471,Tablet,4,362.06,294 Main St,Debit Card,Returned,TRK11107152,4,,Facebook,1448.24
+ORD201074,2024-05-10,C21437,Phone,1,222.73,120 Main St,Online,Returned,TRK81624772,4,,Google,222.73
+ORD201075,2024-08-31,C40949,Monitor,2,552.63,609 Main St,Debit Card,Delivered,TRK43066749,7,WINTER15,Instagram,1105.26
+ORD201076,2023-05-08,C99116,Laptop,4,686.61,176 Main St,Cash,Shipped,TRK52711973,6,,Referral,2746.44
+ORD201077,2025-03-07,C57861,Printer,3,305.16,115 Main St,Credit Card,Cancelled,TRK47775217,8,SAVE10,Referral,915.48
+ORD201078,2023-03-18,C62627,Desk,1,41.09,881 Main St,Online,Returned,TRK90060232,4,WINTER15,Email,41.09
+ORD201079,2024-06-20,C89979,Phone,5,634,144 Main St,Gift Card,Delivered,TRK99055909,8,,Email,3170
+ORD201080,2023-01-20,C70613,Laptop,5,464.74,438 Main St,Gift Card,Delivered,TRK33140293,7,,Referral,2323.7
+ORD201081,2023-04-21,C55636,Monitor,4,425.6,494 Main St,Credit Card,Pending,TRK85897054,5,FREESHIP,Google,1702.4
+ORD201082,2023-10-06,C96595,Chair,3,573.22,177 Main St,Debit Card,Pending,TRK59779174,5,SAVE10,Email,1719.66
+ORD201083,2024-07-09,C68508,Chair,1,123.28,895 Main St,Credit Card,Delivered,TRK98960285,3,SAVE10,Email,123.28
+ORD201084,2023-01-08,C45175,Phone,1,70.82,128 Main St,Gift Card,Pending,TRK41792296,1,WINTER15,Instagram,70.82
+ORD201085,2023-05-21,C28049,Printer,2,646.69,404 Main St,Debit Card,Shipped,TRK91426444,7,WINTER15,Instagram,1293.38
+ORD201086,2023-12-23,C46967,Tablet,2,513.42,401 Main St,Online,Pending,TRK91439791,5,WINTER15,Instagram,1026.84
+ORD201087,2025-03-23,C84134,Laptop,4,693.07,530 Main St,Online,Shipped,TRK48659380,8,SAVE10,Instagram,2772.28
+ORD201088,2023-11-30,C49831,Desk,3,491.43,213 Main St,Gift Card,Shipped,TRK21232601,6,WINTER15,Instagram,1474.29
+ORD201089,2025-03-15,C13324,Tablet,2,599.74,440 Main St,Gift Card,Shipped,TRK66967997,2,,Instagram,1199.48
+ORD201090,2023-02-25,C61225,Monitor,2,650.25,996 Main St,Gift Card,Returned,TRK37022954,6,,Instagram,1300.5
+ORD201091,2024-10-08,C16400,Laptop,3,209.48,123 Main St,Debit Card,Pending,TRK57771859,4,,Email,628.44
+ORD201092,2023-08-21,C38642,Laptop,5,209.2,930 Main St,Debit Card,Delivered,TRK47744396,6,WINTER15,Email,1046
+ORD201093,2023-06-09,C86773,Phone,4,197.36,557 Main St,Gift Card,Returned,TRK22612240,9,FREESHIP,Instagram,789.44
+ORD201094,2023-06-28,C66093,Printer,4,648.91,615 Main St,Credit Card,Shipped,TRK54950785,6,SAVE10,Instagram,2595.64
+ORD201095,2024-04-23,C33051,Phone,2,441.54,397 Main St,Online,Delivered,TRK92929755,2,SAVE10,Email,883.08
+ORD201096,2025-05-03,C18169,Tablet,2,464.92,782 Main St,Debit Card,Returned,TRK49482923,2,,Facebook,929.84
+ORD201097,2024-12-26,C81370,Monitor,5,506.45,344 Main St,Gift Card,Shipped,TRK99682998,7,WINTER15,Google,2532.25
+ORD201098,2023-06-17,C91103,Monitor,4,255.86,155 Main St,Credit Card,Delivered,TRK91653000,7,,Email,1023.44
+ORD201099,2024-09-19,C21953,Laptop,2,125.23,272 Main St,Cash,Cancelled,TRK60774796,3,FREESHIP,Email,250.46
+ORD201100,2023-08-17,C15146,Laptop,5,38.11,428 Main St,Debit Card,Cancelled,TRK79790530,6,WINTER15,Instagram,190.55
+ORD201101,2025-06-08,C43546,Monitor,3,161.97,904 Main St,Cash,Pending,TRK85871121,4,SAVE10,Email,485.91
+ORD201102,2024-06-03,C98474,Chair,4,347.17,997 Main St,Debit Card,Shipped,TRK86192984,8,,Instagram,1388.68
+ORD201103,2023-04-24,C90292,Laptop,4,276.32,129 Main St,Online,Delivered,TRK26270357,5,,Google,1105.28
+ORD201104,2024-07-25,C17075,Tablet,4,314.76,850 Main St,Online,Shipped,TRK63547510,8,,Instagram,1259.04
+ORD201105,2024-01-08,C12487,Tablet,3,475.69,884 Main St,Gift Card,Cancelled,TRK23324770,3,FREESHIP,Google,1427.07
+ORD201106,2023-03-12,C34555,Chair,1,372.8,903 Main St,Cash,Cancelled,TRK72859458,6,SAVE10,Facebook,372.8
+ORD201107,2025-06-30,C25110,Tablet,2,63.21,282 Main St,Online,Cancelled,TRK80963328,4,SAVE10,Google,126.42
+ORD201108,2023-03-20,C35136,Laptop,1,634.94,462 Main St,Online,Cancelled,TRK49753703,5,WINTER15,Instagram,634.94
+ORD201109,2024-04-08,C62277,Printer,4,77.47,474 Main St,Gift Card,Returned,TRK32026174,7,SAVE10,Instagram,309.88
+ORD201110,2024-02-25,C12472,Chair,3,84.31,912 Main St,Credit Card,Shipped,TRK36103184,3,SAVE10,Email,252.93
+ORD201111,2023-05-06,C24047,Monitor,4,234.45,362 Main St,Online,Cancelled,TRK91338580,9,FREESHIP,Instagram,937.8
+ORD201112,2023-10-13,C76929,Desk,1,356.81,563 Main St,Online,Delivered,TRK80694400,1,WINTER15,Instagram,356.81
+ORD201113,2023-03-19,C52914,Desk,4,209.99,168 Main St,Cash,Delivered,TRK80819053,8,,Google,839.96
+ORD201114,2023-03-16,C55164,Tablet,3,659.88,609 Main St,Gift Card,Cancelled,TRK79610967,3,,Google,1979.64
+ORD201115,2025-06-20,C70426,Laptop,2,336.32,562 Main St,Online,Returned,TRK89687816,3,,Google,672.64
+ORD201116,2023-10-14,C69149,Printer,2,531.49,562 Main St,Credit Card,Delivered,TRK61265132,7,WINTER15,Facebook,1062.98
+ORD201117,2024-05-20,C78684,Chair,3,588.44,858 Main St,Gift Card,Shipped,TRK95779073,8,WINTER15,Google,1765.32
+ORD201118,2024-05-24,C58168,Phone,3,251.48,359 Main St,Credit Card,Returned,TRK99102265,4,,Email,754.44
+ORD201119,2024-11-24,C99024,Laptop,1,684.65,250 Main St,Credit Card,Delivered,TRK24675988,1,FREESHIP,Email,684.65
+ORD201120,2025-05-10,C22919,Tablet,1,195.86,267 Main St,Online,Pending,TRK82416295,3,,Facebook,195.86
+ORD201121,2023-05-28,C98354,Phone,3,50.34,393 Main St,Gift Card,Returned,TRK43070888,3,FREESHIP,Instagram,151.02
+ORD201122,2023-06-07,C38840,Monitor,5,678.19,766 Main St,Online,Returned,TRK32496970,8,,Facebook,3390.95
+ORD201123,2023-04-14,C68936,Tablet,3,554.25,843 Main St,Debit Card,Shipped,TRK73163634,6,WINTER15,Referral,1662.75
+ORD201124,2023-05-09,C33744,Chair,4,576.87,888 Main St,Gift Card,Returned,TRK40245983,5,,Instagram,2307.48
+ORD201125,2023-10-16,C23555,Desk,4,408.36,156 Main St,Gift Card,Cancelled,TRK67210247,4,FREESHIP,Referral,1633.44
+ORD201126,2024-07-22,C34337,Phone,5,190.11,325 Main St,Cash,Delivered,TRK36195559,7,SAVE10,Google,950.55
+ORD201127,2025-03-15,C69396,Printer,3,602.75,920 Main St,Credit Card,Shipped,TRK33155049,6,SAVE10,Email,1808.25
+ORD201128,2023-08-17,C49198,Monitor,3,646.79,447 Main St,Cash,Cancelled,TRK10883354,5,WINTER15,Google,1940.37
+ORD201129,2023-06-11,C43911,Chair,4,418.71,239 Main St,Cash,Pending,TRK37495481,8,FREESHIP,Instagram,1674.84
+ORD201130,2025-02-16,C24347,Laptop,2,323.45,533 Main St,Credit Card,Returned,TRK27233265,5,FREESHIP,Instagram,646.9
+ORD201131,2024-07-18,C21043,Phone,1,694.5,195 Main St,Credit Card,Pending,TRK41691086,3,WINTER15,Facebook,694.5
+ORD201132,2024-12-02,C58858,Chair,2,337.32,948 Main St,Credit Card,Cancelled,TRK30406357,4,SAVE10,Email,674.64
+ORD201133,2024-04-09,C20670,Printer,2,467.91,432 Main St,Gift Card,Returned,TRK76731303,5,WINTER15,Facebook,935.82
+ORD201134,2024-06-08,C90993,Desk,4,38.28,950 Main St,Debit Card,Cancelled,TRK53964711,4,WINTER15,Facebook,153.12
+ORD201135,2023-12-28,C11473,Printer,2,73.41,562 Main St,Online,Shipped,TRK97793275,2,SAVE10,Google,146.82
+ORD201136,2023-09-24,C71899,Tablet,3,668.33,799 Main St,Gift Card,Pending,TRK34856025,4,WINTER15,Facebook,2004.99
+ORD201137,2024-07-29,C48577,Printer,4,410.21,841 Main St,Cash,Pending,TRK59911645,5,WINTER15,Instagram,1640.84
+ORD201138,2023-12-18,C13100,Desk,4,294.41,188 Main St,Debit Card,Pending,TRK55565668,4,,Instagram,1177.64
+ORD201139,2025-03-01,C70659,Chair,3,501.82,568 Main St,Gift Card,Cancelled,TRK28290825,4,FREESHIP,Email,1505.46
+ORD201140,2024-06-24,C49838,Printer,2,552.83,904 Main St,Credit Card,Cancelled,TRK38297718,3,,Referral,1105.66
+ORD201141,2025-02-16,C11998,Chair,3,498.66,382 Main St,Cash,Cancelled,TRK26707221,6,,Email,1495.98
+ORD201142,2024-08-23,C23405,Phone,4,695.1,484 Main St,Debit Card,Returned,TRK83678708,8,,Email,2780.4
+ORD201143,2023-04-03,C41132,Chair,1,381.61,114 Main St,Debit Card,Pending,TRK51040137,5,,Email,381.61
+ORD201144,2023-02-16,C88463,Desk,5,507.94,292 Main St,Online,Cancelled,TRK88749996,9,,Facebook,2539.7
+ORD201145,2025-05-12,C28152,Desk,3,571.53,821 Main St,Debit Card,Delivered,TRK59642814,6,FREESHIP,Facebook,1714.59
+ORD201146,2024-10-03,C36383,Monitor,5,421.44,286 Main St,Cash,Pending,TRK93336357,5,SAVE10,Instagram,2107.2
+ORD201147,2025-01-02,C19759,Chair,2,588.3,234 Main St,Online,Pending,TRK22515454,2,FREESHIP,Email,1176.6
+ORD201148,2024-06-25,C54886,Phone,1,355.15,442 Main St,Cash,Returned,TRK66241930,2,SAVE10,Email,355.15
+ORD201149,2024-07-25,C27305,Chair,2,695.29,957 Main St,Credit Card,Pending,TRK28789916,6,FREESHIP,Instagram,1390.58
+ORD201150,2023-02-20,C17921,Desk,4,302.65,119 Main St,Credit Card,Cancelled,TRK79291524,8,SAVE10,Referral,1210.6
+ORD201151,2023-01-29,C94381,Chair,2,608.04,962 Main St,Cash,Cancelled,TRK69804304,4,,Google,1216.08
+ORD201152,2023-11-09,C25162,Tablet,2,344.18,533 Main St,Credit Card,Shipped,TRK42183078,7,,Referral,688.36
+ORD201153,2024-12-16,C98317,Monitor,4,696.71,276 Main St,Debit Card,Shipped,TRK37172138,4,,Instagram,2786.84
+ORD201154,2025-06-11,C53631,Monitor,3,198.63,593 Main St,Cash,Pending,TRK67589167,8,SAVE10,Instagram,595.89
+ORD201155,2023-08-13,C41478,Printer,4,534.57,667 Main St,Credit Card,Delivered,TRK62068126,6,FREESHIP,Facebook,2138.28
+ORD201156,2023-07-19,C20512,Laptop,4,690.78,980 Main St,Credit Card,Shipped,TRK98234737,9,,Referral,2763.12
+ORD201157,2024-05-29,C25841,Monitor,3,301.55,242 Main St,Debit Card,Delivered,TRK21451375,5,FREESHIP,Google,904.65
+ORD201158,2023-04-20,C82781,Monitor,4,27.42,661 Main St,Debit Card,Pending,TRK20605418,4,SAVE10,Referral,109.68
+ORD201159,2024-02-23,C66112,Desk,4,466.7,874 Main St,Debit Card,Returned,TRK60955607,8,,Instagram,1866.8
+ORD201160,2024-09-04,C40466,Desk,1,541.64,449 Main St,Debit Card,Shipped,TRK70255168,5,SAVE10,Email,541.64
+ORD201161,2023-10-16,C32570,Phone,1,11.39,826 Main St,Cash,Cancelled,TRK35969968,6,WINTER15,Email,11.39
+ORD201162,2025-03-11,C29405,Phone,2,224.37,251 Main St,Debit Card,Delivered,TRK33125798,3,WINTER15,Referral,448.74
+ORD201163,2024-06-11,C30643,Laptop,3,306.29,966 Main St,Credit Card,Returned,TRK19477485,7,WINTER15,Instagram,918.87
+ORD201164,2024-01-08,C65890,Tablet,5,315.57,340 Main St,Debit Card,Delivered,TRK64530489,6,WINTER15,Email,1577.85
+ORD201165,2023-07-14,C36992,Chair,3,223.79,617 Main St,Debit Card,Pending,TRK63460217,3,,Google,671.37
+ORD201166,2023-07-31,C95568,Chair,3,324.47,971 Main St,Cash,Delivered,TRK37075292,4,WINTER15,Email,973.41
+ORD201167,2023-10-17,C17966,Printer,2,92.87,360 Main St,Credit Card,Pending,TRK31169396,5,FREESHIP,Facebook,185.74
+ORD201168,2023-04-08,C89559,Laptop,2,331.42,297 Main St,Credit Card,Delivered,TRK82838108,6,WINTER15,Google,662.84
+ORD201169,2024-12-23,C15849,Chair,1,525.43,643 Main St,Cash,Cancelled,TRK26794546,2,SAVE10,Instagram,525.43
+ORD201170,2023-08-03,C94257,Printer,2,697.19,762 Main St,Cash,Returned,TRK40220743,7,FREESHIP,Email,1394.38
+ORD201171,2023-08-28,C39911,Phone,4,518.4,699 Main St,Credit Card,Delivered,TRK80431998,7,SAVE10,Facebook,2073.6
+ORD201172,2025-02-04,C28828,Desk,3,131.96,745 Main St,Credit Card,Pending,TRK32550359,8,,Instagram,395.88
+ORD201173,2024-10-04,C82921,Monitor,1,208.36,703 Main St,Online,Shipped,TRK31079911,4,FREESHIP,Email,208.36
+ORD201174,2023-11-27,C50159,Printer,3,222.34,105 Main St,Credit Card,Returned,TRK53737452,5,WINTER15,Email,667.02
+ORD201175,2024-09-10,C62512,Printer,3,91.74,368 Main St,Debit Card,Returned,TRK24139954,8,FREESHIP,Referral,275.22
+ORD201176,2023-08-13,C39260,Tablet,2,213.83,374 Main St,Debit Card,Cancelled,TRK55587314,2,WINTER15,Email,427.66
+ORD201177,2023-04-27,C23917,Printer,1,127.55,433 Main St,Cash,Shipped,TRK44434536,3,SAVE10,Referral,127.55
+ORD201178,2024-09-08,C65107,Monitor,1,70.24,456 Main St,Credit Card,Cancelled,TRK10261578,4,FREESHIP,Google,70.24
+ORD201179,2023-01-08,C84630,Laptop,5,518.55,907 Main St,Credit Card,Cancelled,TRK48054997,6,WINTER15,Instagram,2592.75
+ORD201180,2023-10-31,C42235,Chair,4,298.36,722 Main St,Debit Card,Pending,TRK49379882,8,FREESHIP,Google,1193.44
+ORD201181,2023-07-27,C70246,Desk,3,158.74,293 Main St,Online,Pending,TRK45708320,7,FREESHIP,Instagram,476.22
+ORD201182,2025-06-14,C18473,Chair,2,420.29,700 Main St,Gift Card,Returned,TRK97834202,3,SAVE10,Google,840.58
+ORD201183,2023-04-05,C12607,Desk,1,281.52,460 Main St,Gift Card,Shipped,TRK83653396,6,WINTER15,Referral,281.52
+ORD201184,2023-09-27,C10222,Laptop,1,204.08,979 Main St,Gift Card,Returned,TRK86297895,4,,Google,204.08
+ORD201185,2024-07-08,C77344,Chair,1,343.31,777 Main St,Gift Card,Returned,TRK20605055,6,SAVE10,Google,343.31
+ORD201186,2023-11-18,C65497,Monitor,1,163.32,676 Main St,Cash,Shipped,TRK83702761,6,WINTER15,Facebook,163.32
+ORD201187,2024-03-13,C26340,Desk,2,184.6,562 Main St,Gift Card,Delivered,TRK59962703,7,WINTER15,Email,369.2
+ORD201188,2023-10-07,C75619,Printer,2,371.29,924 Main St,Gift Card,Shipped,TRK23086941,5,WINTER15,Facebook,742.58
+ORD201189,2024-08-17,C96136,Tablet,5,389.22,149 Main St,Cash,Cancelled,TRK60856682,7,,Referral,1946.1
+ORD201190,2025-06-08,C46886,Desk,3,616.39,754 Main St,Credit Card,Shipped,TRK82791646,6,FREESHIP,Instagram,1849.17
+ORD201191,2025-02-10,C44148,Desk,4,376.43,809 Main St,Gift Card,Pending,TRK67872709,5,WINTER15,Instagram,1505.72
+ORD201192,2024-02-28,C72007,Chair,3,432.85,999 Main St,Online,Pending,TRK16240916,4,,Instagram,1298.55
+ORD201193,2025-06-16,C45104,Tablet,1,687.89,348 Main St,Cash,Returned,TRK38559816,1,FREESHIP,Email,687.89
+ORD201194,2023-11-19,C29885,Printer,3,189.44,725 Main St,Cash,Pending,TRK62067865,4,FREESHIP,Email,568.32
+ORD201195,2024-06-20,C21126,Desk,1,107.04,392 Main St,Credit Card,Cancelled,TRK38009181,6,FREESHIP,Google,107.04
+ORD201196,2024-03-04,C20095,Monitor,2,662.53,778 Main St,Online,Cancelled,TRK69207593,5,,Facebook,1325.06
+ORD201197,2023-07-13,C79674,Tablet,2,436.84,275 Main St,Online,Delivered,TRK88039356,2,FREESHIP,Instagram,873.68
+ORD201198,2024-08-22,C64753,Chair,4,262.52,509 Main St,Debit Card,Cancelled,TRK71683331,4,WINTER15,Instagram,1050.08
+ORD201199,2023-06-11,C57502,Tablet,4,560.58,201 Main St,Gift Card,Returned,TRK51116746,6,SAVE10,Referral,2242.32
\ No newline at end of file
diff --git a/agentic-sap-workflows/RFCTypes.xsd b/agentic-sap-workflows/RFCTypes.xsd
new file mode 100644
index 0000000..48f5917
--- /dev/null
+++ b/agentic-sap-workflows/RFCTypes.xsd
@@ -0,0 +1,171 @@
+
+
+
+
+ Types
+
+
+
+
+
+
+
+
+
+
+
+
+ Character field 2048 places
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Message type: S Success, E Error, W Warning, I Info, A Abort
+
+
+
+
+
+
+
+
+
+ Message Class
+
+
+
+
+
+
+
+
+
+ Message Number
+
+
+
+
+
+
+
+
+
+
+ Message Text
+
+
+
+
+
+
+
+
+
+ Application log: log number
+
+
+
+
+
+
+
+
+
+ Application log: Internal message serial number
+
+
+
+
+
+
+
+
+
+
+ Message Variable
+
+
+
+
+
+
+
+
+
+ Message Variable
+
+
+
+
+
+
+
+
+
+ Message Variable
+
+
+
+
+
+
+
+
+
+ Message Variable
+
+
+
+
+
+
+
+
+
+ Parameter Name
+
+
+
+
+
+
+
+
+
+ Lines in parameter
+
+
+
+
+ Field in parameter
+
+
+
+
+
+
+
+
+
+ Logical system from which message originates
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/agentic-sap-workflows/SendCustomerOrdersSpreadsheetsWorkflow.json b/agentic-sap-workflows/SendCustomerOrdersSpreadsheetsWorkflow.json
new file mode 100644
index 0000000..bceab96
--- /dev/null
+++ b/agentic-sap-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 keep empty strings to produce nodes as requested.\n const xml = lines\n .map(line => `${xmlEscape(line)} `)\n .join(\"\");\n\n return { xml };\n"
+ },
+ "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/SendCustomerOrdersWorkflow.json b/agentic-sap-workflows/SendCustomerOrdersWorkflow.json
new file mode 100644
index 0000000..f9c686e
--- /dev/null
+++ b/agentic-sap-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_skip_titles": {
+ "type": "Compose",
+ "inputs": "@skip(split(string(body('Read_CSV_orders_from_blob')?['content']), '\r\n'),1)",
+ "runAfter": {
+ "Read_CSV_orders_from_blob": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "Transform_CSV_to_XML": {
+ "type": "JavaScriptCode",
+ "inputs": {
+ "code": "const lines = workflowContext.actions.Extract_rows_skip_titles.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 keep empty strings to produce nodes as requested.\n const xml = lines\n .map(line => `${xmlEscape(line)} `)\n .join(\"\");\n\n return { xml };\n"
+ },
+ "runAfter": {
+ "Extract_rows_skip_titles": [
+ "SUCCEEDED"
+ ]
+ }
+ },
+ "[RFC]_Create_all_IDocs": {
+ "type": "ServiceProvider",
+ "inputs": {
+ "parameters": {
+ "inputBodyType": "XML",
+ "rfcName": "Z_RUN_ONLINE_ORDER_REPORT",
+ "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/ValidationErrorsReport.txt b/agentic-sap-workflows/ValidationErrorsReport.txt
new file mode 100644
index 0000000..6168fd1
--- /dev/null
+++ b/agentic-sap-workflows/ValidationErrorsReport.txt
@@ -0,0 +1,47 @@
+DOCNUM: 0000000002552570 | OrderID: ORD200007 | Failed Rules: PaymentMethod: PaymentMethod field value cannot be “Cashâ€.
+DOCNUM: 0000000002552565 OrderID: ORD200002 Failed Rules: OrderStatus: OrderStatus field value must be different from “Cancelledâ€.
+DOCNUM: 0000000002552567 | OrderID: ORD200004 | Failed rules: None
+DOCNUM: 0000000002552563 OrderId: ORD200000 FailedRules: None
+DOCNUM: 0000000002552562 | OrderID: ORD200002 | Failed Rules: OrderStatus: OrderStatus field value must be different from 'Cancelled'.
+DOCNUM: 0000000002552573 OrderId: ORD200010 FailedRules: None
+DOCNUM: 0000000002552568 OrderId: ORD200005 - No validation failures
+DOCNUM: 0000000002552574 OrderId: ORD200011 Failed Rules: None
+DOCNUM: 0000000002552566 OrderID: ORD200003 Failed Rules: None
+DOCNUM: 0000000002552576 OrderID: ORD200013 - No validation rules failed
+DOCNUM: 0000000002552575, OrderId: ORD200012, Failed rules: None
+DOCNUM: 0000000002552578 | OrderId: ORD200015 | Failed Rules: PaymentMethod - PaymentMethod field value cannot be "Cash".
+DOCNUM: 0000000002552572 | OrderID: ORD200009 | Failed rules: None
+DOCNUM: 0000000002552561 | OrderId: ORD200001 | FailedRules: None
+DOCNUM: 0000000002552560 | OrderId: ORD200000 | No validation rule failures
+DOCNUM: 0000000002552564 OrderId: ORD200001 - No validation failures
+DOCNUM: 0000000002552569 OrderID: ORD200006 FailedRules: None
+DOCNUM: 0000000002552571 | OrderID: ORD200008 | Failed rules: OrderStatus must be different from “Cancelledâ€.
+DOCNUM: 0000000002552577 OrderID: ORD200014 - No validation rule failures.
+DOCNUM: 0000000002552605 OrderID: ORD200004 - FailedRules: None
+DOCNUM: 0000000002552607 OrderId: ORD200006 FailedRules: None
+DOCNUM: 0000000002552603 OrderId: ORD200002 Failed Rules: OrderStatus: OrderStatus field value must be different from “Cancelledâ€.
+DOCNUM: 0000000002552610 OrderId: ORD200009 - No validation rule failures.
+DOCNUM: 0000000002552612 OrderID: ORD200011 FailedRules: None
+DOCNUM: 0000000002552608 | OrderId: ORD200007 | Failed Rules: PaymentMethod: PaymentMethod field value cannot be “Cashâ€.
+DOCNUM: 0000000002552616 | OrderId: ORD200015 | FailedRules: PaymentMethod: PaymentMethod field value cannot be “Cashâ€.
+DOCNUM: 0000000002552615 OrderId: ORD200014 | Failed Rules: None
+DOCNUM: 0000000002552599 OrderId: ORD200001 No validation failures
+DOCNUM: 0000000002552601 OrderId: ORD200000 FailedRules: None
+DOCNUM: 0000000002552611 | OrderID: ORD200010 | Failed validation rules: None
+DOCNUM: 0000000002552606 OrderId: ORD200005 Failed rules: None
+DOCNUM: 0000000002552598 | OrderId: ORD200000 | No validation failures
+DOCNUM: 0000000002552600 | OrderID: ORD200002 | Failed validations: OrderStatus must be different from 'Cancelled'.
+DOCNUM: 0000000002552614 OrderID: ORD200013 Failed Rules: None
+DOCNUM: 0000000002552602 | OrderID: ORD200001 | No validation rule failures
+DOCNUM: 0000000002552604 OrderId: ORD200003 FailedRules: None
+DOCNUM: 0000000002552613, OrderID: ORD200012, Failed Rules: None
+DOCNUM: 0000000002552609 OrderID: ORD200008 Failed Rules: OrderStatus must be different from 'Cancelled'.
+DOCNUM: 0000000002552623 OrderID: ORD200007 Failed rules: PaymentMethod field value cannot be "Cash".
+DOCNUM: 0000000002552617 | OrderID: ORD200000 | FailedRules: None
+DOCNUM: 0000000002552621 OrderId: ORD200001 FailedRules: None
+DOCNUM: 0000000002552619 | OrderID: ORD200002 | Failed Rules: OrderStatus field value must be different from 'Cancelled'.
+DOCNUM: 0000000002552620 OrderID: ORD200000 - No validation failures.
+DOCNUM: 0000000002552622 OrderID: ORD200002 | Failed Rules: OrderStatus: OrderStatus field value must be different from “Cancelledâ€.
+DOCNUM: 0000000002552625 OrderID: ORD200015 Failed Rules: PaymentMethod field value cannot be "Cash".
+DOCNUM: 0000000002552618 OrderId: ORD200001 Failed rules: None
+DOCNUM: 0000000002552624 | OrderID: ORD200008 | Failed rules: OrderStatus: OrderStatus field value must be different from “Cancelledâ€.
diff --git a/agentic-sap-workflows/ValidationRules.txt b/agentic-sap-workflows/ValidationRules.txt
new file mode 100644
index 0000000..3a719f3
--- /dev/null
+++ b/agentic-sap-workflows/ValidationRules.txt
@@ -0,0 +1,11 @@
+Validation Rules
+
+Here are the validation rules we want to enforce. It is to ensure the quality of the order data that we save. The format is:
+Field name: condition.
+
+PaymentMethod: PaymentMethod field value must exist.
+PaymentMethod: PaymentMethod field value cannot be “Cashâ€.
+OrderStatus: OrderStatus field value must be different from “Cancelledâ€.
+CouponCode: CouponCode field value must have at least 1 character.
+OrderID: OrderID field value must be unique in the CSV array.
+Do not validate the Date field.
diff --git a/agentic-sap-workflows/Z_CREATE_ONLINE_ORDER_IDOC_ABAPCODE.abap b/agentic-sap-workflows/Z_CREATE_ONLINE_ORDER_IDOC_ABAPCODE.abap
new file mode 100644
index 0000000..45d92fc
--- /dev/null
+++ b/agentic-sap-workflows/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().
+ "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.
\ No newline at end of file
diff --git a/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS.xsd b/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS.xsd
new file mode 100644
index 0000000..846d80f
--- /dev/null
+++ b/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS.xsd
@@ -0,0 +1,76 @@
+
+
+
+
+
+ Rfc
+
+
+
+
+
+ http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_GET_ORDERS_ANALYSIS
+
+
+
+
+
+
+ Return Parameter
+
+
+
+
+ Char 20
+
+
+
+
+
+
+
+
+
+ Structure for CSV lines
+
+
+
+
+
+
+
+
+ http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_GET_ORDERS_ANALYSIS/response
+
+
+
+
+
+
+ Return Parameter
+
+
+
+
+ Free text or value
+
+
+
+
+ large fixed-size string
+
+
+
+
+
+
+
+
+
+ Structure for CSV lines
+
+
+
+
+
+
\ No newline at end of file
diff --git a/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS_ABAPCODE.abap b/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS_ABAPCODE.abap
new file mode 100644
index 0000000..12b888d
--- /dev/null
+++ b/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS_ABAPCODE.abap
@@ -0,0 +1,43 @@
+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
+*"----------------------------------------------------------------------
+
+* SUBMITs ZCREATE_ONLINEORDER_IDOC for each CSV line, passing parameters.
+*-----------------------------------------------------------------------
+
+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.
\ No newline at end of file
diff --git a/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS_EXCEPTIONMESSAGE_ABAPCODE.abap b/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS_EXCEPTIONMESSAGE_ABAPCODE.abap
new file mode 100644
index 0000000..5db4fe6
--- /dev/null
+++ b/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS_EXCEPTIONMESSAGE_ABAPCODE.abap
@@ -0,0 +1,55 @@
+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
+*"----------------------------------------------------------------------
+
+* SUBMITs ZCREATE_ONLINEORDER_IDOC for each CSV line, passing parameters.
+*-----------------------------------------------------------------------
+
+TRY.
+CALL FUNCTION 'Z_GET_ORDERS_ANALYSIS' DESTINATION DEST
+ IMPORTING
+ ANALYSIS = ANALYSIS
+ EXCEPTIONMSG = EXCEPTIONMSG
+ TABLES
+ IT_CSV = IT_CSV
+ CHANGING
+ RETURN = RETURN
+ EXCEPTIONS
+ system_failure = 1
+ communication_failure = 2.
+
+CATCH
+cx_root INTO DATA(lx_any). "Optional for other exceptions
+
+ENDTRY.
+
+IF sy-subrc <> 0.
+
+DATA: lv_text TYPE string.
+
+CALL FUNCTION 'FORMAT_MESSAGE'
+ EXPORTING
+ id = sy-msgid
+ NO = sy-msgno
+ v1 = sy-msgv1
+ v2 = sy-msgv2
+ v3 = sy-msgv3
+ v4 = sy-msgv4
+ IMPORTING
+ msg = EXCEPTIONMSG.
+
+ENDIF.
+
+ENDFUNCTION.
\ No newline at end of file
diff --git a/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS_NAMEDEXCEPTION_ABAPCODE.abap b/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS_NAMEDEXCEPTION_ABAPCODE.abap
new file mode 100644
index 0000000..591d99c
--- /dev/null
+++ b/agentic-sap-workflows/Z_GET_ORDERS_ANALYSIS_NAMEDEXCEPTION_ABAPCODE.abap
@@ -0,0 +1,45 @@
+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
+*"----------------------------------------------------------------------
+
+* SUBMITs ZCREATE_ONLINEORDER_IDOC for each CSV line, passing parameters.
+*-----------------------------------------------------------------------
+
+CALL FUNCTION 'Z_GET_ORDERS_ANALYSIS' DESTINATION DEST
+ IMPORTING
+ ANALYSIS = ANALYSIS
+ EXCEPTIONMSG = EXCEPTIONMSG
+ TABLES
+ IT_CSV = IT_CSV
+ CHANGING
+ RETURN = RETURN
+ EXCEPTIONS
+ SENDEXCEPTIONTOSAPSERVER = 1
+ YOUR_EXCEPTION_NAME_HERE = 2
+ system_failure = 3 MESSAGE EXCEPTIONMSG
+ communication_failure = 4 MESSAGE EXCEPTIONMSG
+ OTHERS = 5.
+
+CASE sy-subrc.
+ WHEN 0.
+ EXCEPTIONMSG = 'ok'.
+ WHEN 1 or 2.
+ EXCEPTIONMSG = |Exception from workflow: { sy-msgv1 }{ sy-msgv2 }{ sy-msgv3 }{ sy-msgv4 } |.
+ WHEN 3 or 4.
+ WHEN OTHERS.
+ EXCEPTIONMSG = |Error in workflow: { sy-msgv1 }{ sy-msgv2 }{ sy-msgv3 }{ sy-msgv4 } |.
+ENDCASE.
+
+ENDFUNCTION.
\ 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