cds-caching 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/app/dashboard/controller/App-dbg.controller.js +14 -14
- package/app/dashboard/controller/App-dbg.controller.js.map +1 -1
- package/app/dashboard/controller/App.controller.js +1 -1
- package/app/dashboard/controller/App.controller.js.map +1 -1
- package/app/dashboard/controller/App.controller.ts +14 -14
- package/app/dashboard/controller/BaseController-dbg.js +7 -0
- package/app/dashboard/controller/BaseController-dbg.js.map +1 -1
- package/app/dashboard/controller/BaseController.js +1 -1
- package/app/dashboard/controller/BaseController.js.map +1 -1
- package/app/dashboard/controller/BaseController.ts +10 -0
- package/app/dashboard/controller/Cache-dbg.controller.js +34 -25
- package/app/dashboard/controller/Cache-dbg.controller.js.map +1 -1
- package/app/dashboard/controller/Cache.controller.js +1 -1
- package/app/dashboard/controller/Cache.controller.js.map +1 -1
- package/app/dashboard/controller/Cache.controller.ts +36 -25
- package/app/dashboard/controller/SingleMetric-dbg.controller.js +56 -50
- package/app/dashboard/controller/SingleMetric-dbg.controller.js.map +1 -1
- package/app/dashboard/controller/SingleMetric.controller.js +1 -1
- package/app/dashboard/controller/SingleMetric.controller.js.map +1 -1
- package/app/dashboard/controller/SingleMetric.controller.ts +29 -22
- package/app/dashboard/i18n/i18n.properties +235 -0
- package/app/dashboard/i18n/i18n_de.properties +271 -3
- package/app/dashboard/i18n/i18n_en.properties +295 -2
- package/app/dashboard/resources/sap-ui-custom.js +11 -11
- package/app/dashboard/resources/sap-ui-custom.js.map +1 -1
- package/app/dashboard/view/Cache.view.xml +149 -149
- package/app/dashboard/view/Main.view.xml +7 -7
- package/app/dashboard/view/SingleMetric.view.xml +30 -30
- package/cds-plugin.js +31 -8
- package/lib/CachingService.js +11 -10
- package/lib/operations/BasicOperations.js +7 -4
- package/lib/support/KeyManager.js +40 -2
- package/lib/util.js +28 -2
- package/package.json +1 -1
|
@@ -110,7 +110,7 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
110
110
|
this.uiModel.setProperty("/cacheEntries", entries);
|
|
111
111
|
} catch (error) {
|
|
112
112
|
console.error("Error loading cache entries:", error);
|
|
113
|
-
MessageBox.error(
|
|
113
|
+
MessageBox.error(await this.i18nText("msgLoadEntriesFailed"));
|
|
114
114
|
} finally {
|
|
115
115
|
this.uiModel.setProperty("/loadingEntries", false);
|
|
116
116
|
}
|
|
@@ -143,7 +143,7 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
143
143
|
const value = this.uiModel.getProperty("/createValue");
|
|
144
144
|
const ttl = this.uiModel.getProperty("/createTtl");
|
|
145
145
|
if (!key || !value) {
|
|
146
|
-
MessageBox.error(
|
|
146
|
+
MessageBox.error(await this.i18nText("msgProvideKeyValue"));
|
|
147
147
|
return;
|
|
148
148
|
}
|
|
149
149
|
try {
|
|
@@ -153,7 +153,7 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
153
153
|
context.setParameter("value", value);
|
|
154
154
|
context.setParameter("ttl", ttl);
|
|
155
155
|
await context.invoke();
|
|
156
|
-
MessageToast.show(
|
|
156
|
+
MessageToast.show(await this.i18nText("msgEntryCreated"));
|
|
157
157
|
|
|
158
158
|
// Clear form
|
|
159
159
|
this.uiModel.setProperty("/createKey", "");
|
|
@@ -161,7 +161,7 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
161
161
|
this.uiModel.setProperty("/createTtl", 3600);
|
|
162
162
|
} catch (error) {
|
|
163
163
|
console.error("Error setting cache entry:", error);
|
|
164
|
-
MessageBox.error(
|
|
164
|
+
MessageBox.error(await this.i18nText("msgCreateEntryFailed"));
|
|
165
165
|
}
|
|
166
166
|
},
|
|
167
167
|
/**
|
|
@@ -171,7 +171,7 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
171
171
|
const cacheContext = this.getView().getElementBinding().getBoundContext();
|
|
172
172
|
const key = this.uiModel.getProperty("/getKey");
|
|
173
173
|
if (!key) {
|
|
174
|
-
MessageBox.error(
|
|
174
|
+
MessageBox.error(await this.i18nText("msgProvideKey"));
|
|
175
175
|
return;
|
|
176
176
|
}
|
|
177
177
|
try {
|
|
@@ -180,10 +180,10 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
180
180
|
action.setParameter("key", key);
|
|
181
181
|
await action.invoke();
|
|
182
182
|
const result = await action.requestObject();
|
|
183
|
-
this.uiModel.setProperty("/getValue", result.value ||
|
|
183
|
+
this.uiModel.setProperty("/getValue", result.value || (await this.i18nText("msgNotFound")));
|
|
184
184
|
} catch (error) {
|
|
185
185
|
console.error("Error getting cache entry:", error);
|
|
186
|
-
this.uiModel.setProperty("/getValue",
|
|
186
|
+
this.uiModel.setProperty("/getValue", await this.i18nText("msgGetEntryError"));
|
|
187
187
|
}
|
|
188
188
|
},
|
|
189
189
|
/**
|
|
@@ -193,7 +193,7 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
193
193
|
const cacheContext = this.getView().getElementBinding().getBoundContext();
|
|
194
194
|
const key = this.uiModel.getProperty("/deleteKey");
|
|
195
195
|
if (!key) {
|
|
196
|
-
MessageBox.error(
|
|
196
|
+
MessageBox.error(await this.i18nText("msgProvideKey"));
|
|
197
197
|
return;
|
|
198
198
|
}
|
|
199
199
|
try {
|
|
@@ -201,13 +201,13 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
201
201
|
const context = model.bindContext(`plugin.cds_caching.CachingApiService.deleteEntry(...)`, cacheContext);
|
|
202
202
|
context.setParameter("key", key);
|
|
203
203
|
await context.invoke();
|
|
204
|
-
MessageToast.show(
|
|
204
|
+
MessageToast.show(await this.i18nText("msgEntryDeleted"));
|
|
205
205
|
|
|
206
206
|
// Clear form
|
|
207
207
|
this.uiModel.setProperty("/deleteKey", "");
|
|
208
208
|
} catch (error) {
|
|
209
209
|
console.error("Error deleting cache entry:", error);
|
|
210
|
-
MessageBox.error(
|
|
210
|
+
MessageBox.error(await this.i18nText("msgDeleteEntryFailed"));
|
|
211
211
|
}
|
|
212
212
|
},
|
|
213
213
|
/**
|
|
@@ -221,10 +221,10 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
221
221
|
const context = model.bindContext(`plugin.cds_caching.CachingApiService.setMetricsEnabled(...)`, cacheContext);
|
|
222
222
|
context.setParameter("enabled", enabled);
|
|
223
223
|
await context.invoke();
|
|
224
|
-
MessageToast.show(
|
|
224
|
+
MessageToast.show(await this.i18nText(enabled ? "msgMetricsEnabled" : "msgMetricsDisabled"));
|
|
225
225
|
} catch (error) {
|
|
226
226
|
console.error("Error setting metrics enabled:", error);
|
|
227
|
-
MessageBox.error(
|
|
227
|
+
MessageBox.error(await this.i18nText("msgFailedUpdateMetrics"));
|
|
228
228
|
// Revert the switch
|
|
229
229
|
this.uiModel.setProperty("/enableMetrics", !enabled);
|
|
230
230
|
}
|
|
@@ -240,10 +240,10 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
240
240
|
const context = model.bindContext(`plugin.cds_caching.CachingApiService.setKeyMetricsEnabled(...)`, cacheContext);
|
|
241
241
|
context.setParameter("enabled", enabled);
|
|
242
242
|
await context.invoke();
|
|
243
|
-
MessageToast.show(
|
|
243
|
+
MessageToast.show(await this.i18nText(enabled ? "msgKeyMetricsEnabled" : "msgKeyMetricsDisabled"));
|
|
244
244
|
} catch (error) {
|
|
245
245
|
console.error("Error setting key metrics enabled:", error);
|
|
246
|
-
MessageBox.error(
|
|
246
|
+
MessageBox.error(await this.i18nText("msgFailedKeyMetrics"));
|
|
247
247
|
// Revert the switch
|
|
248
248
|
this.uiModel.setProperty("/enableKeyMetrics", !enabled);
|
|
249
249
|
}
|
|
@@ -253,7 +253,8 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
253
253
|
*/
|
|
254
254
|
onClearCache: async function _onClearCache() {
|
|
255
255
|
const cacheContext = this.getView().getElementBinding().getBoundContext();
|
|
256
|
-
|
|
256
|
+
const confirmMsg = await this.i18nText("msgConfirmClearCache");
|
|
257
|
+
MessageBox.confirm(confirmMsg, {
|
|
257
258
|
actions: [MessageBox.Action.OK, MessageBox.Action.CANCEL],
|
|
258
259
|
emphasizedAction: MessageBox.Action.OK,
|
|
259
260
|
onClose: async action => {
|
|
@@ -262,13 +263,13 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
262
263
|
const model = this.getModel();
|
|
263
264
|
const context = model.bindContext(`plugin.cds_caching.CachingApiService.clear(...)`, cacheContext);
|
|
264
265
|
await context.invoke();
|
|
265
|
-
MessageBox.success(
|
|
266
|
+
MessageBox.success(await this.i18nText("msgCacheCleared"));
|
|
266
267
|
|
|
267
268
|
// Refresh the data
|
|
268
269
|
await this.onRefresh();
|
|
269
270
|
} catch (error) {
|
|
270
271
|
console.error("Error clearing cache:", error);
|
|
271
|
-
MessageBox.error(
|
|
272
|
+
MessageBox.error(await this.i18nText("msgClearCacheFailed"));
|
|
272
273
|
}
|
|
273
274
|
}
|
|
274
275
|
}
|
|
@@ -336,28 +337,33 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
336
337
|
cacheOptions: saveJson(context.getProperty("cacheOptions")),
|
|
337
338
|
keyName: context.getProperty("keyName")
|
|
338
339
|
});
|
|
340
|
+
const e = s => Cache.escapeFragmentXml(s);
|
|
341
|
+
const tabMeta = e(await this.i18nText("keyTabMetadata"));
|
|
342
|
+
const tabSub = e(await this.i18nText("keyTabSubject"));
|
|
343
|
+
const tabQ = e(await this.i18nText("keyTabQuery"));
|
|
344
|
+
const tabCo = e(await this.i18nText("keyTabCacheOptions"));
|
|
339
345
|
const fragment = await Fragment.load({
|
|
340
346
|
definition: `<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" xmlns:form="sap.ui.layout.form">
|
|
341
347
|
<Popover title="{localData>/keyName}" placement="Bottom" contentWidth="30rem">
|
|
342
348
|
<content>
|
|
343
349
|
<IconTabBar>
|
|
344
350
|
<items>
|
|
345
|
-
<IconTabFilter text="
|
|
351
|
+
<IconTabFilter text="${tabMeta}">
|
|
346
352
|
<content>
|
|
347
353
|
<TextArea value="{localData>/metadata}" rows="20" width="100%" editable="false" />
|
|
348
354
|
</content>
|
|
349
355
|
</IconTabFilter>
|
|
350
|
-
<IconTabFilter text="
|
|
356
|
+
<IconTabFilter text="${tabSub}" >
|
|
351
357
|
<content>
|
|
352
358
|
<TextArea value="{localData>/subject}" rows="20" width="100%" editable="false" />
|
|
353
359
|
</content>
|
|
354
360
|
</IconTabFilter>
|
|
355
|
-
<IconTabFilter text="
|
|
361
|
+
<IconTabFilter text="${tabQ}" >
|
|
356
362
|
<content>
|
|
357
363
|
<TextArea value="{localData>/query}" rows="20" width="100%" editable="false" />
|
|
358
364
|
</content>
|
|
359
365
|
</IconTabFilter>
|
|
360
|
-
<IconTabFilter text="
|
|
366
|
+
<IconTabFilter text="${tabCo}" >
|
|
361
367
|
<content>
|
|
362
368
|
<TextArea value="{localData>/cacheOptions}" rows="20" width="100%" editable="false" />
|
|
363
369
|
</content>
|
|
@@ -385,13 +391,13 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
385
391
|
const model = this.getModel();
|
|
386
392
|
const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearMetrics(...)`, cacheContext);
|
|
387
393
|
await action.invoke();
|
|
388
|
-
MessageToast.show(
|
|
394
|
+
MessageToast.show(await this.i18nText("msgMetricsCleared"));
|
|
389
395
|
|
|
390
396
|
// Refresh the data
|
|
391
397
|
await this.onRefreshMetricsData();
|
|
392
398
|
} catch (error) {
|
|
393
399
|
console.error("Error clearing metrics:", error);
|
|
394
|
-
MessageBox.error(
|
|
400
|
+
MessageBox.error(await this.i18nText("msgFailedClearMetrics"));
|
|
395
401
|
}
|
|
396
402
|
},
|
|
397
403
|
/**
|
|
@@ -406,16 +412,19 @@ sap.ui.define(["sap/m/MessageBox", "./BaseController", "sap/ui/model/json/JSONMo
|
|
|
406
412
|
const model = this.getModel();
|
|
407
413
|
const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearKeyMetrics(...)`, cacheContext);
|
|
408
414
|
await action.invoke();
|
|
409
|
-
MessageToast.show(
|
|
415
|
+
MessageToast.show(await this.i18nText("msgKeyMetricsCleared"));
|
|
410
416
|
|
|
411
417
|
// Refresh the data
|
|
412
418
|
await this.onRefreshKeyMetricsData();
|
|
413
419
|
} catch (error) {
|
|
414
420
|
console.error("Error clearing key metrics:", error);
|
|
415
|
-
MessageBox.error(
|
|
421
|
+
MessageBox.error(await this.i18nText("msgFailedClearKeyMetrics"));
|
|
416
422
|
}
|
|
417
423
|
}
|
|
418
424
|
});
|
|
425
|
+
Cache.escapeFragmentXml = function escapeFragmentXml(s) {
|
|
426
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/"/g, """).replace(/'/g, "'");
|
|
427
|
+
};
|
|
419
428
|
return Cache;
|
|
420
429
|
});
|
|
421
430
|
//# sourceMappingURL=Cache-dbg.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cache-dbg.controller.js","names":["BaseController","_interopRequireDefault","__BaseController","Cache","extend","onInit","_onInit","BaseController.prototype.onInit.call","uiModel","JSONModel","selectedTab","statistics","loading","loadingEntries","showEntriesTable","cacheEntries","createKey","createValue","createTtl","getKey","getValue","deleteKey","metricsEnabled","keyMetricsEnabled","getView","setModel","getRouter","getRoute","attachPatternMatched","onRouteMatched","_onRouteMatched","event","cache","getParameter","getModel","setProperty","bindElement","path","events","change","context","getElementBinding","getBoundContext","getProperty","loadStatistics","loadKeyMetricsData","_loadStatistics","refresh","table","byId","filter","Filter","FilterOperator","EQ","getBinding","isSuspended","resume","_loadKeyMetricsData","onLoadCacheEntries","_onLoadCacheEntries","cacheContext","setSizeLimit","model","bindContext","invoke","value","entries","requestObject","entry","tags","join","error","console","MessageBox","onMetricsRowSelect","_onMetricsRowSelect","selectedRow","metric","getObject","cacheName","navTo","metricId","ID","onSetKey","_onSetKey","key","ttl","setParameter","MessageToast","show","onGetKey","_onGetKey","action","result","onDeleteKey","_onDeleteKey","onEnableMetricsChange","_onEnableMetricsChange","enabled","onEnableKeyMetricsChange","_onEnableKeyMetricsChange","onClearCache","_onClearCache","confirm","actions","Action","OK","CANCEL","emphasizedAction","onClose","success","onRefresh","_onRefresh","handleClose","_handleClose","handleFullScreen","_handleFullScreen","handleExitFullScreen","_handleExitFullScreen","onKeyMetricsRowSelect","_onKeyMetricsRowSelect","keyMetricId","onRefreshKeyMetricsData","_onRefreshKeyMetricsData","onRefreshMetricsData","_onRefreshMetricsData","onShowKeyMetricsMetadata","_onShowKeyMetricsMetadata","getSource","getBindingContext","saveJson","json","JSON","stringify","parse","localData","metadata","subject","query","cacheOptions","keyName","fragment","Fragment","load","definition","controller","popover","openBy","onClearMetrics","_onClearMetrics","onClearKeyMetrics","_onClearKeyMetrics"],"sources":["Cache.controller.ts"],"sourcesContent":["import MessageBox from \"sap/m/MessageBox\";\nimport BaseController from \"./BaseController\";\nimport ODataModel from \"sap/ui/model/odata/v4/ODataModel\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport { Route$PatternMatchedEvent } from \"sap/ui/core/routing/Route\";\nimport Table, { Table$RowSelectionChangeEvent } from \"sap/ui/table/Table\";\nimport MessageToast from \"sap/m/MessageToast\";\nimport Context from \"sap/ui/model/odata/v4/Context\";\nimport Filter from \"sap/ui/model/Filter\";\nimport FilterOperator from \"sap/ui/model/FilterOperator\";\nimport ODataListBinding from \"sap/ui/model/odata/v4/ODataListBinding\";\nimport { Button$PressEvent } from \"sap/m/Button\";\nimport Fragment from \"sap/ui/core/Fragment\";\nimport Popover from \"sap/m/Popover\";\n\n/**\n * @namespace cds.plugin.caching.dashboard.controller\n */\nexport default class Cache extends BaseController {\n private uiModel: JSONModel;\n\n public onInit(): void {\n super.onInit();\n\n // Create a JSON model for UI data binding\n this.uiModel = new JSONModel({\n selectedTab: \"main\",\n statistics: [],\n loading: false,\n loadingEntries: false,\n showEntriesTable: false,\n cacheEntries: [],\n\n // Create\n createKey: \"\",\n createValue: \"\",\n createTtl: 3600,\n\n // Get\n getKey: \"\",\n getValue: \"\",\n\n // Delete\n deleteKey: \"\",\n\n // Metrics\n metricsEnabled: false,\n keyMetricsEnabled: false,\n });\n this.getView().setModel(this.uiModel, \"ui\");\n\n\n this.getRouter().getRoute(\"cache\").attachPatternMatched(this.onRouteMatched, this);\n\n }\n\n public onRouteMatched(event: Route$PatternMatchedEvent): void {\n const { cache } = event.getParameter(\"arguments\") as { cache: string };\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/selectedCache\", cache);\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"TwoColumnsMidExpanded\");\n\n this.getView().bindElement({\n path: \"/Caches('\" + cache + \"')\",\n events: {\n change: (event: any) => {\n const context = this.getView().getElementBinding().getBoundContext();\n if (context) {\n const cache = context.getProperty(\"configuration\");\n this.uiModel.setProperty(\"/config\", cache);\n this.loadStatistics();\n this.loadKeyMetricsData();\n }\n }\n }\n });\n }\n\n /**\n * Load statistics based on current filters\n */\n private async loadStatistics(refresh: boolean = false): Promise<void> {\n const table = this.getView().byId(\"metricsTable\") as Table;\n const filter = new Filter(\"cache\", FilterOperator.EQ, (<JSONModel>this.getModel(\"app\")).getProperty(\"/selectedCache\"));\n if (table.getBinding(\"rows\").isSuspended()) {\n table.getBinding(\"rows\").resume();\n }\n if (refresh) {\n (<ODataListBinding>table.getBinding(\"rows\")).refresh();\n } else {\n (<ODataListBinding>table.getBinding(\"rows\")).filter(filter);\n }\n }\n\n /**\n * Load key tracking data\n */\n async loadKeyMetricsData(refresh: boolean = false): Promise<void> {\n const table = this.getView().byId(\"keyMetricsTable\") as Table;\n const filter = new Filter(\"cache\", FilterOperator.EQ, (<JSONModel>this.getModel(\"app\")).getProperty(\"/selectedCache\"));\n if (table.getBinding(\"rows\").isSuspended()) {\n table.getBinding(\"rows\").resume();\n }\n if (refresh) {\n (<ODataListBinding>table.getBinding(\"rows\")).refresh();\n } else {\n (<ODataListBinding>table.getBinding(\"rows\")).filter(filter);\n }\n }\n\n\n /**\n * Load cache entries\n */\n public async onLoadCacheEntries(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n this.uiModel.setProperty(\"/loadingEntries\", true);\n this.uiModel.setProperty(\"/showEntriesTable\", true);\n this.uiModel.setSizeLimit(100_000);\n\n // Call the backend to get cache entries\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.getEntries(...)`, cacheContext);\n await context.invoke();\n const { value: entries } = await context.requestObject();\n for (const entry of entries) {\n entry.tags = entry.tags.join(\", \");\n }\n\n this.uiModel.setProperty(\"/cacheEntries\", entries);\n\n } catch (error) {\n console.error(\"Error loading cache entries:\", error);\n MessageBox.error(\"Failed to load cache entries\");\n } finally {\n this.uiModel.setProperty(\"/loadingEntries\", false);\n }\n }\n\n /**\n * Handle statistics row selection\n */\n public onMetricsRowSelect(event: Table$RowSelectionChangeEvent): void {\n const selectedRow = event.getParameter(\"rowContext\");\n if (selectedRow) {\n const metric = selectedRow.getObject() as any;\n const cacheName = this.getView().getElementBinding().getBoundContext().getProperty(\"name\");\n\n // Navigate to single metric view\n this.getRouter().navTo(\"singleMetric\", {\n cache: cacheName,\n metricId: metric.ID\n });\n\n // Set layout to three columns\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n }\n }\n\n /**\n * Set cache entry\n */\n public async onSetKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/createKey\");\n const value = this.uiModel.getProperty(\"/createValue\");\n const ttl = this.uiModel.getProperty(\"/createTtl\");\n\n if (!key || !value) {\n MessageBox.error(\"Please provide both key and value\");\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setEntry(...)`, cacheContext);\n context.setParameter(\"key\", key);\n context.setParameter(\"value\", value);\n context.setParameter(\"ttl\", ttl);\n await context.invoke();\n\n\n MessageToast.show(\"Cache entry created successfully\");\n\n // Clear form\n this.uiModel.setProperty(\"/createKey\", \"\");\n this.uiModel.setProperty(\"/createValue\", \"\");\n this.uiModel.setProperty(\"/createTtl\", 3600);\n\n } catch (error) {\n console.error(\"Error setting cache entry:\", error);\n MessageBox.error(\"Failed to create cache entry\");\n }\n }\n\n /**\n * Get cache entry\n */\n public async onGetKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/getKey\");\n\n if (!key) {\n MessageBox.error(\"Please provide a key\");\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.getEntry(...)`, cacheContext);\n action.setParameter(\"key\", key);\n await action.invoke();\n\n const result = await action.requestObject();\n this.uiModel.setProperty(\"/getValue\", result.value || \"Not found\");\n\n } catch (error) {\n console.error(\"Error getting cache entry:\", error);\n this.uiModel.setProperty(\"/getValue\", \"Error: Entry not found or error occurred\");\n }\n }\n\n /**\n * Delete cache entry\n */\n public async onDeleteKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/deleteKey\");\n\n if (!key) {\n MessageBox.error(\"Please provide a key\");\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.deleteEntry(...)`, cacheContext);\n context.setParameter(\"key\", key);\n await context.invoke();\n\n MessageToast.show(\"Cache entry deleted successfully\");\n\n // Clear form\n this.uiModel.setProperty(\"/deleteKey\", \"\");\n\n } catch (error) {\n console.error(\"Error deleting cache entry:\", error);\n MessageBox.error(\"Failed to delete cache entry\");\n }\n }\n\n /**\n * Enable/disable statistics\n */\n public async onEnableMetricsChange(event: any): Promise<void> {\n const enabled = event.getParameter(\"state\");\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setMetricsEnabled(...)`, cacheContext);\n context.setParameter(\"enabled\", enabled);\n await context.invoke();\n\n MessageToast.show(`Metrics ${enabled ? 'enabled' : 'disabled'} successfully`);\n } catch (error) {\n console.error(\"Error setting metrics enabled:\", error);\n MessageBox.error(\"Failed to update metrics setting\");\n // Revert the switch\n this.uiModel.setProperty(\"/enableMetrics\", !enabled);\n }\n }\n\n /**\n * Enable/disable key tracking\n */\n public async onEnableKeyMetricsChange(event: any): Promise<void> {\n const enabled = event.getParameter(\"state\");\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setKeyMetricsEnabled(...)`, cacheContext);\n context.setParameter(\"enabled\", enabled);\n await context.invoke();\n\n MessageToast.show(`Key metrics ${enabled ? 'enabled' : 'disabled'} successfully`);\n\n } catch (error) {\n console.error(\"Error setting key metrics enabled:\", error);\n MessageBox.error(\"Failed to update key metrics setting\");\n // Revert the switch\n this.uiModel.setProperty(\"/enableKeyMetrics\", !enabled);\n }\n }\n\n /**\n * Clear cache\n */\n public async onClearCache(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n MessageBox.confirm(\"Are you sure you want to clear this cache? This action cannot be undone.\", {\n actions: [MessageBox.Action.OK, MessageBox.Action.CANCEL],\n emphasizedAction: MessageBox.Action.OK,\n onClose: async (action: string) => {\n if (action === MessageBox.Action.OK) {\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.clear(...)`, cacheContext);\n await context.invoke();\n\n MessageBox.success(\"Cache cleared successfully\");\n\n // Refresh the data\n await this.onRefresh();\n\n } catch (error) {\n console.error(\"Error clearing cache:\", error);\n MessageBox.error(\"Failed to clear cache\");\n }\n }\n }\n });\n }\n\n /**\n * Handle refresh button press\n */\n public async onRefresh(): Promise<void> {\n if (this.getView().getElementBinding().getBoundContext()) {\n await this.loadStatistics(true);\n await this.loadKeyMetricsData(true);\n }\n }\n\n public handleClose(): void {\n this.getRouter().navTo(\"main\");\n }\n\n public handleFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"MidColumnFullScreen\");\n }\n\n public handleExitFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"TwoColumnsMidExpanded\");\n }\n\n /**\n * Handle key row selection\n */\n public onKeyMetricsRowSelect(event: any): void {\n\n const selectedRow = event.getParameter(\"rowContext\");\n if (selectedRow) {\n const metric = selectedRow.getObject() as any;\n const cacheName = this.getView().getElementBinding().getBoundContext().getProperty(\"name\");\n\n // Navigate to single metric view\n this.getRouter().navTo(\"singleKeyMetric\", {\n cache: cacheName,\n keyMetricId: metric.ID\n });\n\n // Set layout to three columns\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n }\n }\n\n /**\n * Refresh key data\n */\n public async onRefreshKeyMetricsData(): Promise<void> {\n await this.loadKeyMetricsData(true);\n }\n\n public async onRefreshMetricsData(): Promise<void> {\n await this.loadStatistics(true);\n }\n\n public async onShowKeyMetricsMetadata(event: Button$PressEvent): Promise<void> {\n const context = event.getSource().getBindingContext() as Context;\n\n const saveJson = (json: string) => {\n try {\n return JSON.stringify(JSON.parse(json), null, 2)\n } catch (error) {\n return json\n }\n }\n\n const localData = new JSONModel({\n metadata: saveJson(context.getProperty(\"metadata\")),\n subject: saveJson(context.getProperty(\"subject\")),\n query: saveJson(context.getProperty(\"query\")),\n cacheOptions: saveJson(context.getProperty(\"cacheOptions\")),\n keyName: context.getProperty(\"keyName\"),\n });\n\n const fragment = await Fragment.load({\n definition: `<core:FragmentDefinition xmlns:core=\"sap.ui.core\" xmlns:mvc=\"sap.ui.core.mvc\" xmlns=\"sap.m\" xmlns:form=\"sap.ui.layout.form\">\n <Popover title=\"{localData>/keyName}\" placement=\"Bottom\" contentWidth=\"30rem\">\n <content>\n <IconTabBar>\n <items>\n <IconTabFilter text=\"Metadata\">\n <content>\n <TextArea value=\"{localData>/metadata}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"Subject\" >\n <content>\n <TextArea value=\"{localData>/subject}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"Query\" >\n <content>\n <TextArea value=\"{localData>/query}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"Cache Options\" >\n <content>\n <TextArea value=\"{localData>/cacheOptions}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n </items>\n </IconTabBar>\n </content>\n </Popover>\n </core:FragmentDefinition>`,\n controller: this,\n });\n\n const popover = fragment as Popover;\n popover.setModel(localData, \"localData\");\n popover.openBy(event.getSource());\n }\n\n /**\n * Clear statistics\n */\n public async onClearMetrics(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n if (!cacheContext) {\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearMetrics(...)`, cacheContext);\n await action.invoke();\n\n MessageToast.show(\"Metrics cleared successfully\");\n\n // Refresh the data\n await this.onRefreshMetricsData();\n\n } catch (error) {\n console.error(\"Error clearing metrics:\", error);\n MessageBox.error(\"Failed to clear metrics\");\n }\n }\n\n /**\n * Clear key metrics\n */\n public async onClearKeyMetrics(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n if (!cacheContext) {\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearKeyMetrics(...)`, cacheContext);\n await action.invoke();\n\n MessageToast.show(\"Key metrics cleared successfully\");\n\n // Refresh the data\n await this.onRefreshKeyMetricsData();\n\n } catch (error) {\n console.error(\"Error clearing key metrics:\", error);\n MessageBox.error(\"Failed to clear key metrics\");\n }\n }\n\n}"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Cache-dbg.controller.js","names":["BaseController","_interopRequireDefault","__BaseController","Cache","extend","onInit","_onInit","BaseController.prototype.onInit.call","uiModel","JSONModel","selectedTab","statistics","loading","loadingEntries","showEntriesTable","cacheEntries","createKey","createValue","createTtl","getKey","getValue","deleteKey","metricsEnabled","keyMetricsEnabled","getView","setModel","getRouter","getRoute","attachPatternMatched","onRouteMatched","_onRouteMatched","event","cache","getParameter","getModel","setProperty","bindElement","path","events","change","context","getElementBinding","getBoundContext","getProperty","loadStatistics","loadKeyMetricsData","_loadStatistics","refresh","table","byId","filter","Filter","FilterOperator","EQ","getBinding","isSuspended","resume","_loadKeyMetricsData","onLoadCacheEntries","_onLoadCacheEntries","cacheContext","setSizeLimit","model","bindContext","invoke","value","entries","requestObject","entry","tags","join","error","console","MessageBox","i18nText","onMetricsRowSelect","_onMetricsRowSelect","selectedRow","metric","getObject","cacheName","navTo","metricId","ID","onSetKey","_onSetKey","key","ttl","setParameter","MessageToast","show","onGetKey","_onGetKey","action","result","onDeleteKey","_onDeleteKey","onEnableMetricsChange","_onEnableMetricsChange","enabled","onEnableKeyMetricsChange","_onEnableKeyMetricsChange","onClearCache","_onClearCache","confirmMsg","confirm","actions","Action","OK","CANCEL","emphasizedAction","onClose","success","onRefresh","_onRefresh","handleClose","_handleClose","handleFullScreen","_handleFullScreen","handleExitFullScreen","_handleExitFullScreen","onKeyMetricsRowSelect","_onKeyMetricsRowSelect","keyMetricId","onRefreshKeyMetricsData","_onRefreshKeyMetricsData","onRefreshMetricsData","_onRefreshMetricsData","onShowKeyMetricsMetadata","_onShowKeyMetricsMetadata","getSource","getBindingContext","saveJson","json","JSON","stringify","parse","localData","metadata","subject","query","cacheOptions","keyName","e","s","escapeFragmentXml","tabMeta","tabSub","tabQ","tabCo","fragment","Fragment","load","definition","controller","popover","openBy","onClearMetrics","_onClearMetrics","onClearKeyMetrics","_onClearKeyMetrics","replace"],"sources":["Cache.controller.ts"],"sourcesContent":["import MessageBox from \"sap/m/MessageBox\";\nimport BaseController from \"./BaseController\";\nimport ODataModel from \"sap/ui/model/odata/v4/ODataModel\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport { Route$PatternMatchedEvent } from \"sap/ui/core/routing/Route\";\nimport Table, { Table$RowSelectionChangeEvent } from \"sap/ui/table/Table\";\nimport MessageToast from \"sap/m/MessageToast\";\nimport Context from \"sap/ui/model/odata/v4/Context\";\nimport Filter from \"sap/ui/model/Filter\";\nimport FilterOperator from \"sap/ui/model/FilterOperator\";\nimport ODataListBinding from \"sap/ui/model/odata/v4/ODataListBinding\";\nimport { Button$PressEvent } from \"sap/m/Button\";\nimport Fragment from \"sap/ui/core/Fragment\";\nimport Popover from \"sap/m/Popover\";\n\n/**\n * @namespace cds.plugin.caching.dashboard.controller\n */\nexport default class Cache extends BaseController {\n private uiModel: JSONModel;\n\n private static escapeFragmentXml(s: string): string {\n return s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n }\n\n public onInit(): void {\n super.onInit();\n\n // Create a JSON model for UI data binding\n this.uiModel = new JSONModel({\n selectedTab: \"main\",\n statistics: [],\n loading: false,\n loadingEntries: false,\n showEntriesTable: false,\n cacheEntries: [],\n\n // Create\n createKey: \"\",\n createValue: \"\",\n createTtl: 3600,\n\n // Get\n getKey: \"\",\n getValue: \"\",\n\n // Delete\n deleteKey: \"\",\n\n // Metrics\n metricsEnabled: false,\n keyMetricsEnabled: false,\n });\n this.getView().setModel(this.uiModel, \"ui\");\n\n\n this.getRouter().getRoute(\"cache\").attachPatternMatched(this.onRouteMatched, this);\n\n }\n\n public onRouteMatched(event: Route$PatternMatchedEvent): void {\n const { cache } = event.getParameter(\"arguments\") as { cache: string };\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/selectedCache\", cache);\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"TwoColumnsMidExpanded\");\n\n this.getView().bindElement({\n path: \"/Caches('\" + cache + \"')\",\n events: {\n change: (event: any) => {\n const context = this.getView().getElementBinding().getBoundContext();\n if (context) {\n const cache = context.getProperty(\"configuration\");\n this.uiModel.setProperty(\"/config\", cache);\n this.loadStatistics();\n this.loadKeyMetricsData();\n }\n }\n }\n });\n }\n\n /**\n * Load statistics based on current filters\n */\n private async loadStatistics(refresh: boolean = false): Promise<void> {\n const table = this.getView().byId(\"metricsTable\") as Table;\n const filter = new Filter(\"cache\", FilterOperator.EQ, (<JSONModel>this.getModel(\"app\")).getProperty(\"/selectedCache\"));\n if (table.getBinding(\"rows\").isSuspended()) {\n table.getBinding(\"rows\").resume();\n }\n if (refresh) {\n (<ODataListBinding>table.getBinding(\"rows\")).refresh();\n } else {\n (<ODataListBinding>table.getBinding(\"rows\")).filter(filter);\n }\n }\n\n /**\n * Load key tracking data\n */\n async loadKeyMetricsData(refresh: boolean = false): Promise<void> {\n const table = this.getView().byId(\"keyMetricsTable\") as Table;\n const filter = new Filter(\"cache\", FilterOperator.EQ, (<JSONModel>this.getModel(\"app\")).getProperty(\"/selectedCache\"));\n if (table.getBinding(\"rows\").isSuspended()) {\n table.getBinding(\"rows\").resume();\n }\n if (refresh) {\n (<ODataListBinding>table.getBinding(\"rows\")).refresh();\n } else {\n (<ODataListBinding>table.getBinding(\"rows\")).filter(filter);\n }\n }\n\n\n /**\n * Load cache entries\n */\n public async onLoadCacheEntries(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n this.uiModel.setProperty(\"/loadingEntries\", true);\n this.uiModel.setProperty(\"/showEntriesTable\", true);\n this.uiModel.setSizeLimit(100_000);\n\n // Call the backend to get cache entries\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.getEntries(...)`, cacheContext);\n await context.invoke();\n const { value: entries } = await context.requestObject();\n for (const entry of entries) {\n entry.tags = entry.tags.join(\", \");\n }\n\n this.uiModel.setProperty(\"/cacheEntries\", entries);\n\n } catch (error) {\n console.error(\"Error loading cache entries:\", error);\n MessageBox.error(await this.i18nText(\"msgLoadEntriesFailed\"));\n } finally {\n this.uiModel.setProperty(\"/loadingEntries\", false);\n }\n }\n\n /**\n * Handle statistics row selection\n */\n public onMetricsRowSelect(event: Table$RowSelectionChangeEvent): void {\n const selectedRow = event.getParameter(\"rowContext\");\n if (selectedRow) {\n const metric = selectedRow.getObject() as any;\n const cacheName = this.getView().getElementBinding().getBoundContext().getProperty(\"name\");\n\n // Navigate to single metric view\n this.getRouter().navTo(\"singleMetric\", {\n cache: cacheName,\n metricId: metric.ID\n });\n\n // Set layout to three columns\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n }\n }\n\n /**\n * Set cache entry\n */\n public async onSetKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/createKey\");\n const value = this.uiModel.getProperty(\"/createValue\");\n const ttl = this.uiModel.getProperty(\"/createTtl\");\n\n if (!key || !value) {\n MessageBox.error(await this.i18nText(\"msgProvideKeyValue\"));\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setEntry(...)`, cacheContext);\n context.setParameter(\"key\", key);\n context.setParameter(\"value\", value);\n context.setParameter(\"ttl\", ttl);\n await context.invoke();\n\n\n MessageToast.show(await this.i18nText(\"msgEntryCreated\"));\n\n // Clear form\n this.uiModel.setProperty(\"/createKey\", \"\");\n this.uiModel.setProperty(\"/createValue\", \"\");\n this.uiModel.setProperty(\"/createTtl\", 3600);\n\n } catch (error) {\n console.error(\"Error setting cache entry:\", error);\n MessageBox.error(await this.i18nText(\"msgCreateEntryFailed\"));\n }\n }\n\n /**\n * Get cache entry\n */\n public async onGetKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/getKey\");\n\n if (!key) {\n MessageBox.error(await this.i18nText(\"msgProvideKey\"));\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.getEntry(...)`, cacheContext);\n action.setParameter(\"key\", key);\n await action.invoke();\n\n const result = await action.requestObject();\n this.uiModel.setProperty(\"/getValue\", result.value || (await this.i18nText(\"msgNotFound\")));\n\n } catch (error) {\n console.error(\"Error getting cache entry:\", error);\n this.uiModel.setProperty(\"/getValue\", await this.i18nText(\"msgGetEntryError\"));\n }\n }\n\n /**\n * Delete cache entry\n */\n public async onDeleteKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/deleteKey\");\n\n if (!key) {\n MessageBox.error(await this.i18nText(\"msgProvideKey\"));\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.deleteEntry(...)`, cacheContext);\n context.setParameter(\"key\", key);\n await context.invoke();\n\n MessageToast.show(await this.i18nText(\"msgEntryDeleted\"));\n\n // Clear form\n this.uiModel.setProperty(\"/deleteKey\", \"\");\n\n } catch (error) {\n console.error(\"Error deleting cache entry:\", error);\n MessageBox.error(await this.i18nText(\"msgDeleteEntryFailed\"));\n }\n }\n\n /**\n * Enable/disable statistics\n */\n public async onEnableMetricsChange(event: any): Promise<void> {\n const enabled = event.getParameter(\"state\");\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setMetricsEnabled(...)`, cacheContext);\n context.setParameter(\"enabled\", enabled);\n await context.invoke();\n\n MessageToast.show(await this.i18nText(enabled ? \"msgMetricsEnabled\" : \"msgMetricsDisabled\"));\n } catch (error) {\n console.error(\"Error setting metrics enabled:\", error);\n MessageBox.error(await this.i18nText(\"msgFailedUpdateMetrics\"));\n // Revert the switch\n this.uiModel.setProperty(\"/enableMetrics\", !enabled);\n }\n }\n\n /**\n * Enable/disable key tracking\n */\n public async onEnableKeyMetricsChange(event: any): Promise<void> {\n const enabled = event.getParameter(\"state\");\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setKeyMetricsEnabled(...)`, cacheContext);\n context.setParameter(\"enabled\", enabled);\n await context.invoke();\n\n MessageToast.show(await this.i18nText(enabled ? \"msgKeyMetricsEnabled\" : \"msgKeyMetricsDisabled\"));\n\n } catch (error) {\n console.error(\"Error setting key metrics enabled:\", error);\n MessageBox.error(await this.i18nText(\"msgFailedKeyMetrics\"));\n // Revert the switch\n this.uiModel.setProperty(\"/enableKeyMetrics\", !enabled);\n }\n }\n\n /**\n * Clear cache\n */\n public async onClearCache(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n const confirmMsg = await this.i18nText(\"msgConfirmClearCache\");\n MessageBox.confirm(confirmMsg, {\n actions: [MessageBox.Action.OK, MessageBox.Action.CANCEL],\n emphasizedAction: MessageBox.Action.OK,\n onClose: async (action: string) => {\n if (action === MessageBox.Action.OK) {\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.clear(...)`, cacheContext);\n await context.invoke();\n\n MessageBox.success(await this.i18nText(\"msgCacheCleared\"));\n\n // Refresh the data\n await this.onRefresh();\n\n } catch (error) {\n console.error(\"Error clearing cache:\", error);\n MessageBox.error(await this.i18nText(\"msgClearCacheFailed\"));\n }\n }\n }\n });\n }\n\n /**\n * Handle refresh button press\n */\n public async onRefresh(): Promise<void> {\n if (this.getView().getElementBinding().getBoundContext()) {\n await this.loadStatistics(true);\n await this.loadKeyMetricsData(true);\n }\n }\n\n public handleClose(): void {\n this.getRouter().navTo(\"main\");\n }\n\n public handleFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"MidColumnFullScreen\");\n }\n\n public handleExitFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"TwoColumnsMidExpanded\");\n }\n\n /**\n * Handle key row selection\n */\n public onKeyMetricsRowSelect(event: any): void {\n\n const selectedRow = event.getParameter(\"rowContext\");\n if (selectedRow) {\n const metric = selectedRow.getObject() as any;\n const cacheName = this.getView().getElementBinding().getBoundContext().getProperty(\"name\");\n\n // Navigate to single metric view\n this.getRouter().navTo(\"singleKeyMetric\", {\n cache: cacheName,\n keyMetricId: metric.ID\n });\n\n // Set layout to three columns\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n }\n }\n\n /**\n * Refresh key data\n */\n public async onRefreshKeyMetricsData(): Promise<void> {\n await this.loadKeyMetricsData(true);\n }\n\n public async onRefreshMetricsData(): Promise<void> {\n await this.loadStatistics(true);\n }\n\n public async onShowKeyMetricsMetadata(event: Button$PressEvent): Promise<void> {\n const context = event.getSource().getBindingContext() as Context;\n\n const saveJson = (json: string) => {\n try {\n return JSON.stringify(JSON.parse(json), null, 2)\n } catch (error) {\n return json\n }\n }\n\n const localData = new JSONModel({\n metadata: saveJson(context.getProperty(\"metadata\")),\n subject: saveJson(context.getProperty(\"subject\")),\n query: saveJson(context.getProperty(\"query\")),\n cacheOptions: saveJson(context.getProperty(\"cacheOptions\")),\n keyName: context.getProperty(\"keyName\"),\n });\n\n const e = (s: string) => Cache.escapeFragmentXml(s);\n const tabMeta = e(await this.i18nText(\"keyTabMetadata\"));\n const tabSub = e(await this.i18nText(\"keyTabSubject\"));\n const tabQ = e(await this.i18nText(\"keyTabQuery\"));\n const tabCo = e(await this.i18nText(\"keyTabCacheOptions\"));\n\n const fragment = await Fragment.load({\n definition: `<core:FragmentDefinition xmlns:core=\"sap.ui.core\" xmlns:mvc=\"sap.ui.core.mvc\" xmlns=\"sap.m\" xmlns:form=\"sap.ui.layout.form\">\n <Popover title=\"{localData>/keyName}\" placement=\"Bottom\" contentWidth=\"30rem\">\n <content>\n <IconTabBar>\n <items>\n <IconTabFilter text=\"${tabMeta}\">\n <content>\n <TextArea value=\"{localData>/metadata}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"${tabSub}\" >\n <content>\n <TextArea value=\"{localData>/subject}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"${tabQ}\" >\n <content>\n <TextArea value=\"{localData>/query}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"${tabCo}\" >\n <content>\n <TextArea value=\"{localData>/cacheOptions}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n </items>\n </IconTabBar>\n </content>\n </Popover>\n </core:FragmentDefinition>`,\n controller: this,\n });\n\n const popover = fragment as Popover;\n popover.setModel(localData, \"localData\");\n popover.openBy(event.getSource());\n }\n\n /**\n * Clear statistics\n */\n public async onClearMetrics(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n if (!cacheContext) {\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearMetrics(...)`, cacheContext);\n await action.invoke();\n\n MessageToast.show(await this.i18nText(\"msgMetricsCleared\"));\n\n // Refresh the data\n await this.onRefreshMetricsData();\n\n } catch (error) {\n console.error(\"Error clearing metrics:\", error);\n MessageBox.error(await this.i18nText(\"msgFailedClearMetrics\"));\n }\n }\n\n /**\n * Clear key metrics\n */\n public async onClearKeyMetrics(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n if (!cacheContext) {\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearKeyMetrics(...)`, cacheContext);\n await action.invoke();\n\n MessageToast.show(await this.i18nText(\"msgKeyMetricsCleared\"));\n\n // Refresh the data\n await this.onRefreshKeyMetricsData();\n\n } catch (error) {\n console.error(\"Error clearing key metrics:\", error);\n MessageBox.error(await this.i18nText(\"msgFailedClearKeyMetrics\"));\n }\n }\n\n}"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["sap/m/MessageBox","./BaseController","sap/ui/model/json/JSONModel","sap/m/MessageToast","sap/ui/model/Filter","sap/ui/model/FilterOperator","sap/ui/core/Fragment"],function(e,t,n,i,o,r,s){"use strict";function a(e){return e&&e.__esModule&&typeof e.default!=="undefined"?e.default:e}const c=a(t);const l=c.extend("cds.plugin.caching.dashboard.controller.Cache",{onInit:function e(){c.prototype.onInit.call(this);this.uiModel=new n({selectedTab:"main",statistics:[],loading:false,loadingEntries:false,showEntriesTable:false,cacheEntries:[],createKey:"",createValue:"",createTtl:3600,getKey:"",getValue:"",deleteKey:"",metricsEnabled:false,keyMetricsEnabled:false});this.getView().setModel(this.uiModel,"ui");this.getRouter().getRoute("cache").attachPatternMatched(this.onRouteMatched,this)},onRouteMatched:function e(t){const{cache:n}=t.getParameter("arguments");this.getModel("app").setProperty("/selectedCache",n);this.getModel("app").setProperty("/layout","TwoColumnsMidExpanded");this.getView().bindElement({path:"/Caches('"+n+"')",events:{change:e=>{const t=this.getView().getElementBinding().getBoundContext();if(t){const e=t.getProperty("configuration");this.uiModel.setProperty("/config",e);this.loadStatistics();this.loadKeyMetricsData()}}}})},loadStatistics:async function e(t=false){const n=this.getView().byId("metricsTable");const i=new o("cache",r.EQ,this.getModel("app").getProperty("/selectedCache"));if(n.getBinding("rows").isSuspended()){n.getBinding("rows").resume()}if(t){n.getBinding("rows").refresh()}else{n.getBinding("rows").filter(i)}},loadKeyMetricsData:async function e(t=false){const n=this.getView().byId("keyMetricsTable");const i=new o("cache",r.EQ,this.getModel("app").getProperty("/selectedCache"));if(n.getBinding("rows").isSuspended()){n.getBinding("rows").resume()}if(t){n.getBinding("rows").refresh()}else{n.getBinding("rows").filter(i)}},onLoadCacheEntries:async function t(){const n=this.getView().getElementBinding().getBoundContext();try{this.uiModel.setProperty("/loadingEntries",true);this.uiModel.setProperty("/showEntriesTable",true);this.uiModel.setSizeLimit(1e5);const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.getEntries(...)`,n);await t.invoke();const{value:i}=await t.requestObject();for(const e of i){e.tags=e.tags.join(", ")}this.uiModel.setProperty("/cacheEntries",i)}catch(t){console.error("Error loading cache entries:",t);e.error("Failed to load cache entries")}finally{this.uiModel.setProperty("/loadingEntries",false)}},onMetricsRowSelect:function e(t){const n=t.getParameter("rowContext");if(n){const e=n.getObject();const t=this.getView().getElementBinding().getBoundContext().getProperty("name");this.getRouter().navTo("singleMetric",{cache:t,metricId:e.ID});this.getModel("app").setProperty("/layout","ThreeColumnsEndExpanded")}},onSetKey:async function t(){const n=this.getView().getElementBinding().getBoundContext();const o=this.uiModel.getProperty("/createKey");const r=this.uiModel.getProperty("/createValue");const s=this.uiModel.getProperty("/createTtl");if(!o||!r){e.error("Please provide both key and value");return}try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.setEntry(...)`,n);t.setParameter("key",o);t.setParameter("value",r);t.setParameter("ttl",s);await t.invoke();i.show("Cache entry created successfully");this.uiModel.setProperty("/createKey","");this.uiModel.setProperty("/createValue","");this.uiModel.setProperty("/createTtl",3600)}catch(t){console.error("Error setting cache entry:",t);e.error("Failed to create cache entry")}},onGetKey:async function t(){const n=this.getView().getElementBinding().getBoundContext();const i=this.uiModel.getProperty("/getKey");if(!i){e.error("Please provide a key");return}try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.getEntry(...)`,n);t.setParameter("key",i);await t.invoke();const o=await t.requestObject();this.uiModel.setProperty("/getValue",o.value||"Not found")}catch(e){console.error("Error getting cache entry:",e);this.uiModel.setProperty("/getValue","Error: Entry not found or error occurred")}},onDeleteKey:async function t(){const n=this.getView().getElementBinding().getBoundContext();const o=this.uiModel.getProperty("/deleteKey");if(!o){e.error("Please provide a key");return}try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.deleteEntry(...)`,n);t.setParameter("key",o);await t.invoke();i.show("Cache entry deleted successfully");this.uiModel.setProperty("/deleteKey","")}catch(t){console.error("Error deleting cache entry:",t);e.error("Failed to delete cache entry")}},onEnableMetricsChange:async function t(n){const o=n.getParameter("state");const r=this.getView().getElementBinding().getBoundContext();try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.setMetricsEnabled(...)`,r);t.setParameter("enabled",o);await t.invoke();i.show(`Metrics ${o?"enabled":"disabled"} successfully`)}catch(t){console.error("Error setting metrics enabled:",t);e.error("Failed to update metrics setting");this.uiModel.setProperty("/enableMetrics",!o)}},onEnableKeyMetricsChange:async function t(n){const o=n.getParameter("state");const r=this.getView().getElementBinding().getBoundContext();try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.setKeyMetricsEnabled(...)`,r);t.setParameter("enabled",o);await t.invoke();i.show(`Key metrics ${o?"enabled":"disabled"} successfully`)}catch(t){console.error("Error setting key metrics enabled:",t);e.error("Failed to update key metrics setting");this.uiModel.setProperty("/enableKeyMetrics",!o)}},onClearCache:async function t(){const n=this.getView().getElementBinding().getBoundContext();e.confirm("Are you sure you want to clear this cache? This action cannot be undone.",{actions:[e.Action.OK,e.Action.CANCEL],emphasizedAction:e.Action.OK,onClose:async t=>{if(t===e.Action.OK){try{const t=this.getModel();const i=t.bindContext(`plugin.cds_caching.CachingApiService.clear(...)`,n);await i.invoke();e.success("Cache cleared successfully");await this.onRefresh()}catch(t){console.error("Error clearing cache:",t);e.error("Failed to clear cache")}}}})},onRefresh:async function e(){if(this.getView().getElementBinding().getBoundContext()){await this.loadStatistics(true);await this.loadKeyMetricsData(true)}},handleClose:function e(){this.getRouter().navTo("main")},handleFullScreen:function e(){this.getModel("app").setProperty("/layout","MidColumnFullScreen")},handleExitFullScreen:function e(){this.getModel("app").setProperty("/layout","TwoColumnsMidExpanded")},onKeyMetricsRowSelect:function e(t){const n=t.getParameter("rowContext");if(n){const e=n.getObject();const t=this.getView().getElementBinding().getBoundContext().getProperty("name");this.getRouter().navTo("singleKeyMetric",{cache:t,keyMetricId:e.ID});this.getModel("app").setProperty("/layout","ThreeColumnsEndExpanded")}},onRefreshKeyMetricsData:async function e(){await this.loadKeyMetricsData(true)},onRefreshMetricsData:async function e(){await this.loadStatistics(true)},onShowKeyMetricsMetadata:async function e(t){const i=t.getSource().getBindingContext();const o=e=>{try{return JSON.stringify(JSON.parse(e),null,2)}catch(t){return e}};const r=new n({metadata:o(i.getProperty("metadata")),subject:o(i.getProperty("subject")),query:o(i.getProperty("query")),cacheOptions:o(i.getProperty("cacheOptions")),keyName:i.getProperty("keyName")});const a=await s.load({definition:`<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" xmlns:form="sap.ui.layout.form">\n <Popover title="{localData>/keyName}" placement="Bottom" contentWidth="30rem">\n <content>\n <IconTabBar>\n <items>\n <IconTabFilter text="Metadata">\n <content>\n <TextArea value="{localData>/metadata}" rows="20" width="100%" editable="false" />\n </content>\n </IconTabFilter>\n <IconTabFilter text="Subject" >\n <content>\n <TextArea value="{localData>/subject}" rows="20" width="100%" editable="false" />\n </content>\n </IconTabFilter>\n <IconTabFilter text="Query" >\n <content>\n <TextArea value="{localData>/query}" rows="20" width="100%" editable="false" />\n </content>\n </IconTabFilter>\n <IconTabFilter text="Cache Options" >\n <content>\n <TextArea value="{localData>/cacheOptions}" rows="20" width="100%" editable="false" />\n </content>\n </IconTabFilter>\n </items>\n </IconTabBar>\n </content>\n </Popover>\n </core:FragmentDefinition>`,controller:this});const c=a;c.setModel(r,"localData");c.openBy(t.getSource())},onClearMetrics:async function t(){const n=this.getView().getElementBinding().getBoundContext();if(!n){return}try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.clearMetrics(...)`,n);await t.invoke();i.show("Metrics cleared successfully");await this.onRefreshMetricsData()}catch(t){console.error("Error clearing metrics:",t);e.error("Failed to clear metrics")}},onClearKeyMetrics:async function t(){const n=this.getView().getElementBinding().getBoundContext();if(!n){return}try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.clearKeyMetrics(...)`,n);await t.invoke();i.show("Key metrics cleared successfully");await this.onRefreshKeyMetricsData()}catch(t){console.error("Error clearing key metrics:",t);e.error("Failed to clear key metrics")}}});return l});
|
|
1
|
+
sap.ui.define(["sap/m/MessageBox","./BaseController","sap/ui/model/json/JSONModel","sap/m/MessageToast","sap/ui/model/Filter","sap/ui/model/FilterOperator","sap/ui/core/Fragment"],function(e,t,n,i,a,o,s){"use strict";function r(e){return e&&e.__esModule&&typeof e.default!=="undefined"?e.default:e}const c=r(t);const l=c.extend("cds.plugin.caching.dashboard.controller.Cache",{onInit:function e(){c.prototype.onInit.call(this);this.uiModel=new n({selectedTab:"main",statistics:[],loading:false,loadingEntries:false,showEntriesTable:false,cacheEntries:[],createKey:"",createValue:"",createTtl:3600,getKey:"",getValue:"",deleteKey:"",metricsEnabled:false,keyMetricsEnabled:false});this.getView().setModel(this.uiModel,"ui");this.getRouter().getRoute("cache").attachPatternMatched(this.onRouteMatched,this)},onRouteMatched:function e(t){const{cache:n}=t.getParameter("arguments");this.getModel("app").setProperty("/selectedCache",n);this.getModel("app").setProperty("/layout","TwoColumnsMidExpanded");this.getView().bindElement({path:"/Caches('"+n+"')",events:{change:e=>{const t=this.getView().getElementBinding().getBoundContext();if(t){const e=t.getProperty("configuration");this.uiModel.setProperty("/config",e);this.loadStatistics();this.loadKeyMetricsData()}}}})},loadStatistics:async function e(t=false){const n=this.getView().byId("metricsTable");const i=new a("cache",o.EQ,this.getModel("app").getProperty("/selectedCache"));if(n.getBinding("rows").isSuspended()){n.getBinding("rows").resume()}if(t){n.getBinding("rows").refresh()}else{n.getBinding("rows").filter(i)}},loadKeyMetricsData:async function e(t=false){const n=this.getView().byId("keyMetricsTable");const i=new a("cache",o.EQ,this.getModel("app").getProperty("/selectedCache"));if(n.getBinding("rows").isSuspended()){n.getBinding("rows").resume()}if(t){n.getBinding("rows").refresh()}else{n.getBinding("rows").filter(i)}},onLoadCacheEntries:async function t(){const n=this.getView().getElementBinding().getBoundContext();try{this.uiModel.setProperty("/loadingEntries",true);this.uiModel.setProperty("/showEntriesTable",true);this.uiModel.setSizeLimit(1e5);const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.getEntries(...)`,n);await t.invoke();const{value:i}=await t.requestObject();for(const e of i){e.tags=e.tags.join(", ")}this.uiModel.setProperty("/cacheEntries",i)}catch(t){console.error("Error loading cache entries:",t);e.error(await this.i18nText("msgLoadEntriesFailed"))}finally{this.uiModel.setProperty("/loadingEntries",false)}},onMetricsRowSelect:function e(t){const n=t.getParameter("rowContext");if(n){const e=n.getObject();const t=this.getView().getElementBinding().getBoundContext().getProperty("name");this.getRouter().navTo("singleMetric",{cache:t,metricId:e.ID});this.getModel("app").setProperty("/layout","ThreeColumnsEndExpanded")}},onSetKey:async function t(){const n=this.getView().getElementBinding().getBoundContext();const a=this.uiModel.getProperty("/createKey");const o=this.uiModel.getProperty("/createValue");const s=this.uiModel.getProperty("/createTtl");if(!a||!o){e.error(await this.i18nText("msgProvideKeyValue"));return}try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.setEntry(...)`,n);t.setParameter("key",a);t.setParameter("value",o);t.setParameter("ttl",s);await t.invoke();i.show(await this.i18nText("msgEntryCreated"));this.uiModel.setProperty("/createKey","");this.uiModel.setProperty("/createValue","");this.uiModel.setProperty("/createTtl",3600)}catch(t){console.error("Error setting cache entry:",t);e.error(await this.i18nText("msgCreateEntryFailed"))}},onGetKey:async function t(){const n=this.getView().getElementBinding().getBoundContext();const i=this.uiModel.getProperty("/getKey");if(!i){e.error(await this.i18nText("msgProvideKey"));return}try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.getEntry(...)`,n);t.setParameter("key",i);await t.invoke();const a=await t.requestObject();this.uiModel.setProperty("/getValue",a.value||await this.i18nText("msgNotFound"))}catch(e){console.error("Error getting cache entry:",e);this.uiModel.setProperty("/getValue",await this.i18nText("msgGetEntryError"))}},onDeleteKey:async function t(){const n=this.getView().getElementBinding().getBoundContext();const a=this.uiModel.getProperty("/deleteKey");if(!a){e.error(await this.i18nText("msgProvideKey"));return}try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.deleteEntry(...)`,n);t.setParameter("key",a);await t.invoke();i.show(await this.i18nText("msgEntryDeleted"));this.uiModel.setProperty("/deleteKey","")}catch(t){console.error("Error deleting cache entry:",t);e.error(await this.i18nText("msgDeleteEntryFailed"))}},onEnableMetricsChange:async function t(n){const a=n.getParameter("state");const o=this.getView().getElementBinding().getBoundContext();try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.setMetricsEnabled(...)`,o);t.setParameter("enabled",a);await t.invoke();i.show(await this.i18nText(a?"msgMetricsEnabled":"msgMetricsDisabled"))}catch(t){console.error("Error setting metrics enabled:",t);e.error(await this.i18nText("msgFailedUpdateMetrics"));this.uiModel.setProperty("/enableMetrics",!a)}},onEnableKeyMetricsChange:async function t(n){const a=n.getParameter("state");const o=this.getView().getElementBinding().getBoundContext();try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.setKeyMetricsEnabled(...)`,o);t.setParameter("enabled",a);await t.invoke();i.show(await this.i18nText(a?"msgKeyMetricsEnabled":"msgKeyMetricsDisabled"))}catch(t){console.error("Error setting key metrics enabled:",t);e.error(await this.i18nText("msgFailedKeyMetrics"));this.uiModel.setProperty("/enableKeyMetrics",!a)}},onClearCache:async function t(){const n=this.getView().getElementBinding().getBoundContext();const i=await this.i18nText("msgConfirmClearCache");e.confirm(i,{actions:[e.Action.OK,e.Action.CANCEL],emphasizedAction:e.Action.OK,onClose:async t=>{if(t===e.Action.OK){try{const t=this.getModel();const i=t.bindContext(`plugin.cds_caching.CachingApiService.clear(...)`,n);await i.invoke();e.success(await this.i18nText("msgCacheCleared"));await this.onRefresh()}catch(t){console.error("Error clearing cache:",t);e.error(await this.i18nText("msgClearCacheFailed"))}}}})},onRefresh:async function e(){if(this.getView().getElementBinding().getBoundContext()){await this.loadStatistics(true);await this.loadKeyMetricsData(true)}},handleClose:function e(){this.getRouter().navTo("main")},handleFullScreen:function e(){this.getModel("app").setProperty("/layout","MidColumnFullScreen")},handleExitFullScreen:function e(){this.getModel("app").setProperty("/layout","TwoColumnsMidExpanded")},onKeyMetricsRowSelect:function e(t){const n=t.getParameter("rowContext");if(n){const e=n.getObject();const t=this.getView().getElementBinding().getBoundContext().getProperty("name");this.getRouter().navTo("singleKeyMetric",{cache:t,keyMetricId:e.ID});this.getModel("app").setProperty("/layout","ThreeColumnsEndExpanded")}},onRefreshKeyMetricsData:async function e(){await this.loadKeyMetricsData(true)},onRefreshMetricsData:async function e(){await this.loadStatistics(true)},onShowKeyMetricsMetadata:async function e(t){const i=t.getSource().getBindingContext();const a=e=>{try{return JSON.stringify(JSON.parse(e),null,2)}catch(t){return e}};const o=new n({metadata:a(i.getProperty("metadata")),subject:a(i.getProperty("subject")),query:a(i.getProperty("query")),cacheOptions:a(i.getProperty("cacheOptions")),keyName:i.getProperty("keyName")});const r=e=>l.escapeFragmentXml(e);const c=r(await this.i18nText("keyTabMetadata"));const g=r(await this.i18nText("keyTabSubject"));const d=r(await this.i18nText("keyTabQuery"));const h=r(await this.i18nText("keyTabCacheOptions"));const u=await s.load({definition:`<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" xmlns:form="sap.ui.layout.form">\n <Popover title="{localData>/keyName}" placement="Bottom" contentWidth="30rem">\n <content>\n <IconTabBar>\n <items>\n <IconTabFilter text="${c}">\n <content>\n <TextArea value="{localData>/metadata}" rows="20" width="100%" editable="false" />\n </content>\n </IconTabFilter>\n <IconTabFilter text="${g}" >\n <content>\n <TextArea value="{localData>/subject}" rows="20" width="100%" editable="false" />\n </content>\n </IconTabFilter>\n <IconTabFilter text="${d}" >\n <content>\n <TextArea value="{localData>/query}" rows="20" width="100%" editable="false" />\n </content>\n </IconTabFilter>\n <IconTabFilter text="${h}" >\n <content>\n <TextArea value="{localData>/cacheOptions}" rows="20" width="100%" editable="false" />\n </content>\n </IconTabFilter>\n </items>\n </IconTabBar>\n </content>\n </Popover>\n </core:FragmentDefinition>`,controller:this});const y=u;y.setModel(o,"localData");y.openBy(t.getSource())},onClearMetrics:async function t(){const n=this.getView().getElementBinding().getBoundContext();if(!n){return}try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.clearMetrics(...)`,n);await t.invoke();i.show(await this.i18nText("msgMetricsCleared"));await this.onRefreshMetricsData()}catch(t){console.error("Error clearing metrics:",t);e.error(await this.i18nText("msgFailedClearMetrics"))}},onClearKeyMetrics:async function t(){const n=this.getView().getElementBinding().getBoundContext();if(!n){return}try{const e=this.getModel();const t=e.bindContext(`plugin.cds_caching.CachingApiService.clearKeyMetrics(...)`,n);await t.invoke();i.show(await this.i18nText("msgKeyMetricsCleared"));await this.onRefreshKeyMetricsData()}catch(t){console.error("Error clearing key metrics:",t);e.error(await this.i18nText("msgFailedClearKeyMetrics"))}}});l.escapeFragmentXml=function e(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/"/g,""").replace(/'/g,"'")};return l});
|
|
2
2
|
//# sourceMappingURL=Cache.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cache.controller.js","names":["BaseController","_interopRequireDefault","__BaseController","Cache","extend","onInit","_onInit","BaseController.prototype.onInit.call","this","uiModel","JSONModel","selectedTab","statistics","loading","loadingEntries","showEntriesTable","cacheEntries","createKey","createValue","createTtl","getKey","getValue","deleteKey","metricsEnabled","keyMetricsEnabled","getView","setModel","getRouter","getRoute","attachPatternMatched","onRouteMatched","_onRouteMatched","event","cache","getParameter","getModel","setProperty","bindElement","path","events","change","context","getElementBinding","getBoundContext","getProperty","loadStatistics","loadKeyMetricsData","async","_loadStatistics","refresh","table","byId","filter","Filter","FilterOperator","EQ","getBinding","isSuspended","resume","_loadKeyMetricsData","onLoadCacheEntries","_onLoadCacheEntries","cacheContext","setSizeLimit","model","bindContext","invoke","value","entries","requestObject","entry","tags","join","error","console","MessageBox","onMetricsRowSelect","_onMetricsRowSelect","selectedRow","metric","getObject","cacheName","navTo","metricId","ID","onSetKey","_onSetKey","key","ttl","setParameter","MessageToast","show","onGetKey","_onGetKey","action","result","onDeleteKey","_onDeleteKey","onEnableMetricsChange","_onEnableMetricsChange","enabled","onEnableKeyMetricsChange","_onEnableKeyMetricsChange","onClearCache","_onClearCache","confirm","actions","Action","OK","CANCEL","emphasizedAction","onClose","success","onRefresh","_onRefresh","handleClose","_handleClose","handleFullScreen","_handleFullScreen","handleExitFullScreen","_handleExitFullScreen","onKeyMetricsRowSelect","_onKeyMetricsRowSelect","keyMetricId","onRefreshKeyMetricsData","_onRefreshKeyMetricsData","onRefreshMetricsData","_onRefreshMetricsData","onShowKeyMetricsMetadata","_onShowKeyMetricsMetadata","getSource","getBindingContext","saveJson","json","JSON","stringify","parse","localData","metadata","subject","query","cacheOptions","keyName","fragment","Fragment","load","definition","controller","popover","openBy","onClearMetrics","_onClearMetrics","onClearKeyMetrics","_onClearKeyMetrics"],"sources":["Cache.controller.ts"],"sourcesContent":["import MessageBox from \"sap/m/MessageBox\";\nimport BaseController from \"./BaseController\";\nimport ODataModel from \"sap/ui/model/odata/v4/ODataModel\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport { Route$PatternMatchedEvent } from \"sap/ui/core/routing/Route\";\nimport Table, { Table$RowSelectionChangeEvent } from \"sap/ui/table/Table\";\nimport MessageToast from \"sap/m/MessageToast\";\nimport Context from \"sap/ui/model/odata/v4/Context\";\nimport Filter from \"sap/ui/model/Filter\";\nimport FilterOperator from \"sap/ui/model/FilterOperator\";\nimport ODataListBinding from \"sap/ui/model/odata/v4/ODataListBinding\";\nimport { Button$PressEvent } from \"sap/m/Button\";\nimport Fragment from \"sap/ui/core/Fragment\";\nimport Popover from \"sap/m/Popover\";\n\n/**\n * @namespace cds.plugin.caching.dashboard.controller\n */\nexport default class Cache extends BaseController {\n private uiModel: JSONModel;\n\n public onInit(): void {\n super.onInit();\n\n // Create a JSON model for UI data binding\n this.uiModel = new JSONModel({\n selectedTab: \"main\",\n statistics: [],\n loading: false,\n loadingEntries: false,\n showEntriesTable: false,\n cacheEntries: [],\n\n // Create\n createKey: \"\",\n createValue: \"\",\n createTtl: 3600,\n\n // Get\n getKey: \"\",\n getValue: \"\",\n\n // Delete\n deleteKey: \"\",\n\n // Metrics\n metricsEnabled: false,\n keyMetricsEnabled: false,\n });\n this.getView().setModel(this.uiModel, \"ui\");\n\n\n this.getRouter().getRoute(\"cache\").attachPatternMatched(this.onRouteMatched, this);\n\n }\n\n public onRouteMatched(event: Route$PatternMatchedEvent): void {\n const { cache } = event.getParameter(\"arguments\") as { cache: string };\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/selectedCache\", cache);\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"TwoColumnsMidExpanded\");\n\n this.getView().bindElement({\n path: \"/Caches('\" + cache + \"')\",\n events: {\n change: (event: any) => {\n const context = this.getView().getElementBinding().getBoundContext();\n if (context) {\n const cache = context.getProperty(\"configuration\");\n this.uiModel.setProperty(\"/config\", cache);\n this.loadStatistics();\n this.loadKeyMetricsData();\n }\n }\n }\n });\n }\n\n /**\n * Load statistics based on current filters\n */\n private async loadStatistics(refresh: boolean = false): Promise<void> {\n const table = this.getView().byId(\"metricsTable\") as Table;\n const filter = new Filter(\"cache\", FilterOperator.EQ, (<JSONModel>this.getModel(\"app\")).getProperty(\"/selectedCache\"));\n if (table.getBinding(\"rows\").isSuspended()) {\n table.getBinding(\"rows\").resume();\n }\n if (refresh) {\n (<ODataListBinding>table.getBinding(\"rows\")).refresh();\n } else {\n (<ODataListBinding>table.getBinding(\"rows\")).filter(filter);\n }\n }\n\n /**\n * Load key tracking data\n */\n async loadKeyMetricsData(refresh: boolean = false): Promise<void> {\n const table = this.getView().byId(\"keyMetricsTable\") as Table;\n const filter = new Filter(\"cache\", FilterOperator.EQ, (<JSONModel>this.getModel(\"app\")).getProperty(\"/selectedCache\"));\n if (table.getBinding(\"rows\").isSuspended()) {\n table.getBinding(\"rows\").resume();\n }\n if (refresh) {\n (<ODataListBinding>table.getBinding(\"rows\")).refresh();\n } else {\n (<ODataListBinding>table.getBinding(\"rows\")).filter(filter);\n }\n }\n\n\n /**\n * Load cache entries\n */\n public async onLoadCacheEntries(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n this.uiModel.setProperty(\"/loadingEntries\", true);\n this.uiModel.setProperty(\"/showEntriesTable\", true);\n this.uiModel.setSizeLimit(100_000);\n\n // Call the backend to get cache entries\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.getEntries(...)`, cacheContext);\n await context.invoke();\n const { value: entries } = await context.requestObject();\n for (const entry of entries) {\n entry.tags = entry.tags.join(\", \");\n }\n\n this.uiModel.setProperty(\"/cacheEntries\", entries);\n\n } catch (error) {\n console.error(\"Error loading cache entries:\", error);\n MessageBox.error(\"Failed to load cache entries\");\n } finally {\n this.uiModel.setProperty(\"/loadingEntries\", false);\n }\n }\n\n /**\n * Handle statistics row selection\n */\n public onMetricsRowSelect(event: Table$RowSelectionChangeEvent): void {\n const selectedRow = event.getParameter(\"rowContext\");\n if (selectedRow) {\n const metric = selectedRow.getObject() as any;\n const cacheName = this.getView().getElementBinding().getBoundContext().getProperty(\"name\");\n\n // Navigate to single metric view\n this.getRouter().navTo(\"singleMetric\", {\n cache: cacheName,\n metricId: metric.ID\n });\n\n // Set layout to three columns\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n }\n }\n\n /**\n * Set cache entry\n */\n public async onSetKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/createKey\");\n const value = this.uiModel.getProperty(\"/createValue\");\n const ttl = this.uiModel.getProperty(\"/createTtl\");\n\n if (!key || !value) {\n MessageBox.error(\"Please provide both key and value\");\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setEntry(...)`, cacheContext);\n context.setParameter(\"key\", key);\n context.setParameter(\"value\", value);\n context.setParameter(\"ttl\", ttl);\n await context.invoke();\n\n\n MessageToast.show(\"Cache entry created successfully\");\n\n // Clear form\n this.uiModel.setProperty(\"/createKey\", \"\");\n this.uiModel.setProperty(\"/createValue\", \"\");\n this.uiModel.setProperty(\"/createTtl\", 3600);\n\n } catch (error) {\n console.error(\"Error setting cache entry:\", error);\n MessageBox.error(\"Failed to create cache entry\");\n }\n }\n\n /**\n * Get cache entry\n */\n public async onGetKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/getKey\");\n\n if (!key) {\n MessageBox.error(\"Please provide a key\");\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.getEntry(...)`, cacheContext);\n action.setParameter(\"key\", key);\n await action.invoke();\n\n const result = await action.requestObject();\n this.uiModel.setProperty(\"/getValue\", result.value || \"Not found\");\n\n } catch (error) {\n console.error(\"Error getting cache entry:\", error);\n this.uiModel.setProperty(\"/getValue\", \"Error: Entry not found or error occurred\");\n }\n }\n\n /**\n * Delete cache entry\n */\n public async onDeleteKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/deleteKey\");\n\n if (!key) {\n MessageBox.error(\"Please provide a key\");\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.deleteEntry(...)`, cacheContext);\n context.setParameter(\"key\", key);\n await context.invoke();\n\n MessageToast.show(\"Cache entry deleted successfully\");\n\n // Clear form\n this.uiModel.setProperty(\"/deleteKey\", \"\");\n\n } catch (error) {\n console.error(\"Error deleting cache entry:\", error);\n MessageBox.error(\"Failed to delete cache entry\");\n }\n }\n\n /**\n * Enable/disable statistics\n */\n public async onEnableMetricsChange(event: any): Promise<void> {\n const enabled = event.getParameter(\"state\");\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setMetricsEnabled(...)`, cacheContext);\n context.setParameter(\"enabled\", enabled);\n await context.invoke();\n\n MessageToast.show(`Metrics ${enabled ? 'enabled' : 'disabled'} successfully`);\n } catch (error) {\n console.error(\"Error setting metrics enabled:\", error);\n MessageBox.error(\"Failed to update metrics setting\");\n // Revert the switch\n this.uiModel.setProperty(\"/enableMetrics\", !enabled);\n }\n }\n\n /**\n * Enable/disable key tracking\n */\n public async onEnableKeyMetricsChange(event: any): Promise<void> {\n const enabled = event.getParameter(\"state\");\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setKeyMetricsEnabled(...)`, cacheContext);\n context.setParameter(\"enabled\", enabled);\n await context.invoke();\n\n MessageToast.show(`Key metrics ${enabled ? 'enabled' : 'disabled'} successfully`);\n\n } catch (error) {\n console.error(\"Error setting key metrics enabled:\", error);\n MessageBox.error(\"Failed to update key metrics setting\");\n // Revert the switch\n this.uiModel.setProperty(\"/enableKeyMetrics\", !enabled);\n }\n }\n\n /**\n * Clear cache\n */\n public async onClearCache(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n MessageBox.confirm(\"Are you sure you want to clear this cache? This action cannot be undone.\", {\n actions: [MessageBox.Action.OK, MessageBox.Action.CANCEL],\n emphasizedAction: MessageBox.Action.OK,\n onClose: async (action: string) => {\n if (action === MessageBox.Action.OK) {\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.clear(...)`, cacheContext);\n await context.invoke();\n\n MessageBox.success(\"Cache cleared successfully\");\n\n // Refresh the data\n await this.onRefresh();\n\n } catch (error) {\n console.error(\"Error clearing cache:\", error);\n MessageBox.error(\"Failed to clear cache\");\n }\n }\n }\n });\n }\n\n /**\n * Handle refresh button press\n */\n public async onRefresh(): Promise<void> {\n if (this.getView().getElementBinding().getBoundContext()) {\n await this.loadStatistics(true);\n await this.loadKeyMetricsData(true);\n }\n }\n\n public handleClose(): void {\n this.getRouter().navTo(\"main\");\n }\n\n public handleFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"MidColumnFullScreen\");\n }\n\n public handleExitFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"TwoColumnsMidExpanded\");\n }\n\n /**\n * Handle key row selection\n */\n public onKeyMetricsRowSelect(event: any): void {\n\n const selectedRow = event.getParameter(\"rowContext\");\n if (selectedRow) {\n const metric = selectedRow.getObject() as any;\n const cacheName = this.getView().getElementBinding().getBoundContext().getProperty(\"name\");\n\n // Navigate to single metric view\n this.getRouter().navTo(\"singleKeyMetric\", {\n cache: cacheName,\n keyMetricId: metric.ID\n });\n\n // Set layout to three columns\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n }\n }\n\n /**\n * Refresh key data\n */\n public async onRefreshKeyMetricsData(): Promise<void> {\n await this.loadKeyMetricsData(true);\n }\n\n public async onRefreshMetricsData(): Promise<void> {\n await this.loadStatistics(true);\n }\n\n public async onShowKeyMetricsMetadata(event: Button$PressEvent): Promise<void> {\n const context = event.getSource().getBindingContext() as Context;\n\n const saveJson = (json: string) => {\n try {\n return JSON.stringify(JSON.parse(json), null, 2)\n } catch (error) {\n return json\n }\n }\n\n const localData = new JSONModel({\n metadata: saveJson(context.getProperty(\"metadata\")),\n subject: saveJson(context.getProperty(\"subject\")),\n query: saveJson(context.getProperty(\"query\")),\n cacheOptions: saveJson(context.getProperty(\"cacheOptions\")),\n keyName: context.getProperty(\"keyName\"),\n });\n\n const fragment = await Fragment.load({\n definition: `<core:FragmentDefinition xmlns:core=\"sap.ui.core\" xmlns:mvc=\"sap.ui.core.mvc\" xmlns=\"sap.m\" xmlns:form=\"sap.ui.layout.form\">\n <Popover title=\"{localData>/keyName}\" placement=\"Bottom\" contentWidth=\"30rem\">\n <content>\n <IconTabBar>\n <items>\n <IconTabFilter text=\"Metadata\">\n <content>\n <TextArea value=\"{localData>/metadata}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"Subject\" >\n <content>\n <TextArea value=\"{localData>/subject}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"Query\" >\n <content>\n <TextArea value=\"{localData>/query}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"Cache Options\" >\n <content>\n <TextArea value=\"{localData>/cacheOptions}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n </items>\n </IconTabBar>\n </content>\n </Popover>\n </core:FragmentDefinition>`,\n controller: this,\n });\n\n const popover = fragment as Popover;\n popover.setModel(localData, \"localData\");\n popover.openBy(event.getSource());\n }\n\n /**\n * Clear statistics\n */\n public async onClearMetrics(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n if (!cacheContext) {\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearMetrics(...)`, cacheContext);\n await action.invoke();\n\n MessageToast.show(\"Metrics cleared successfully\");\n\n // Refresh the data\n await this.onRefreshMetricsData();\n\n } catch (error) {\n console.error(\"Error clearing metrics:\", error);\n MessageBox.error(\"Failed to clear metrics\");\n }\n }\n\n /**\n * Clear key metrics\n */\n public async onClearKeyMetrics(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n if (!cacheContext) {\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearKeyMetrics(...)`, cacheContext);\n await action.invoke();\n\n MessageToast.show(\"Key metrics cleared successfully\");\n\n // Refresh the data\n await this.onRefreshKeyMetricsData();\n\n } catch (error) {\n console.error(\"Error clearing key metrics:\", error);\n MessageBox.error(\"Failed to clear key metrics\");\n }\n }\n\n}"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Cache.controller.js","names":["BaseController","_interopRequireDefault","__BaseController","Cache","extend","onInit","_onInit","BaseController.prototype.onInit.call","this","uiModel","JSONModel","selectedTab","statistics","loading","loadingEntries","showEntriesTable","cacheEntries","createKey","createValue","createTtl","getKey","getValue","deleteKey","metricsEnabled","keyMetricsEnabled","getView","setModel","getRouter","getRoute","attachPatternMatched","onRouteMatched","_onRouteMatched","event","cache","getParameter","getModel","setProperty","bindElement","path","events","change","context","getElementBinding","getBoundContext","getProperty","loadStatistics","loadKeyMetricsData","async","_loadStatistics","refresh","table","byId","filter","Filter","FilterOperator","EQ","getBinding","isSuspended","resume","_loadKeyMetricsData","onLoadCacheEntries","_onLoadCacheEntries","cacheContext","setSizeLimit","model","bindContext","invoke","value","entries","requestObject","entry","tags","join","error","console","MessageBox","i18nText","onMetricsRowSelect","_onMetricsRowSelect","selectedRow","metric","getObject","cacheName","navTo","metricId","ID","onSetKey","_onSetKey","key","ttl","setParameter","MessageToast","show","onGetKey","_onGetKey","action","result","onDeleteKey","_onDeleteKey","onEnableMetricsChange","_onEnableMetricsChange","enabled","onEnableKeyMetricsChange","_onEnableKeyMetricsChange","onClearCache","_onClearCache","confirmMsg","confirm","actions","Action","OK","CANCEL","emphasizedAction","onClose","success","onRefresh","_onRefresh","handleClose","_handleClose","handleFullScreen","_handleFullScreen","handleExitFullScreen","_handleExitFullScreen","onKeyMetricsRowSelect","_onKeyMetricsRowSelect","keyMetricId","onRefreshKeyMetricsData","_onRefreshKeyMetricsData","onRefreshMetricsData","_onRefreshMetricsData","onShowKeyMetricsMetadata","_onShowKeyMetricsMetadata","getSource","getBindingContext","saveJson","json","JSON","stringify","parse","localData","metadata","subject","query","cacheOptions","keyName","e","s","escapeFragmentXml","tabMeta","tabSub","tabQ","tabCo","fragment","Fragment","load","definition","controller","popover","openBy","onClearMetrics","_onClearMetrics","onClearKeyMetrics","_onClearKeyMetrics","replace"],"sources":["Cache.controller.ts"],"sourcesContent":["import MessageBox from \"sap/m/MessageBox\";\nimport BaseController from \"./BaseController\";\nimport ODataModel from \"sap/ui/model/odata/v4/ODataModel\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport { Route$PatternMatchedEvent } from \"sap/ui/core/routing/Route\";\nimport Table, { Table$RowSelectionChangeEvent } from \"sap/ui/table/Table\";\nimport MessageToast from \"sap/m/MessageToast\";\nimport Context from \"sap/ui/model/odata/v4/Context\";\nimport Filter from \"sap/ui/model/Filter\";\nimport FilterOperator from \"sap/ui/model/FilterOperator\";\nimport ODataListBinding from \"sap/ui/model/odata/v4/ODataListBinding\";\nimport { Button$PressEvent } from \"sap/m/Button\";\nimport Fragment from \"sap/ui/core/Fragment\";\nimport Popover from \"sap/m/Popover\";\n\n/**\n * @namespace cds.plugin.caching.dashboard.controller\n */\nexport default class Cache extends BaseController {\n private uiModel: JSONModel;\n\n private static escapeFragmentXml(s: string): string {\n return s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n }\n\n public onInit(): void {\n super.onInit();\n\n // Create a JSON model for UI data binding\n this.uiModel = new JSONModel({\n selectedTab: \"main\",\n statistics: [],\n loading: false,\n loadingEntries: false,\n showEntriesTable: false,\n cacheEntries: [],\n\n // Create\n createKey: \"\",\n createValue: \"\",\n createTtl: 3600,\n\n // Get\n getKey: \"\",\n getValue: \"\",\n\n // Delete\n deleteKey: \"\",\n\n // Metrics\n metricsEnabled: false,\n keyMetricsEnabled: false,\n });\n this.getView().setModel(this.uiModel, \"ui\");\n\n\n this.getRouter().getRoute(\"cache\").attachPatternMatched(this.onRouteMatched, this);\n\n }\n\n public onRouteMatched(event: Route$PatternMatchedEvent): void {\n const { cache } = event.getParameter(\"arguments\") as { cache: string };\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/selectedCache\", cache);\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"TwoColumnsMidExpanded\");\n\n this.getView().bindElement({\n path: \"/Caches('\" + cache + \"')\",\n events: {\n change: (event: any) => {\n const context = this.getView().getElementBinding().getBoundContext();\n if (context) {\n const cache = context.getProperty(\"configuration\");\n this.uiModel.setProperty(\"/config\", cache);\n this.loadStatistics();\n this.loadKeyMetricsData();\n }\n }\n }\n });\n }\n\n /**\n * Load statistics based on current filters\n */\n private async loadStatistics(refresh: boolean = false): Promise<void> {\n const table = this.getView().byId(\"metricsTable\") as Table;\n const filter = new Filter(\"cache\", FilterOperator.EQ, (<JSONModel>this.getModel(\"app\")).getProperty(\"/selectedCache\"));\n if (table.getBinding(\"rows\").isSuspended()) {\n table.getBinding(\"rows\").resume();\n }\n if (refresh) {\n (<ODataListBinding>table.getBinding(\"rows\")).refresh();\n } else {\n (<ODataListBinding>table.getBinding(\"rows\")).filter(filter);\n }\n }\n\n /**\n * Load key tracking data\n */\n async loadKeyMetricsData(refresh: boolean = false): Promise<void> {\n const table = this.getView().byId(\"keyMetricsTable\") as Table;\n const filter = new Filter(\"cache\", FilterOperator.EQ, (<JSONModel>this.getModel(\"app\")).getProperty(\"/selectedCache\"));\n if (table.getBinding(\"rows\").isSuspended()) {\n table.getBinding(\"rows\").resume();\n }\n if (refresh) {\n (<ODataListBinding>table.getBinding(\"rows\")).refresh();\n } else {\n (<ODataListBinding>table.getBinding(\"rows\")).filter(filter);\n }\n }\n\n\n /**\n * Load cache entries\n */\n public async onLoadCacheEntries(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n this.uiModel.setProperty(\"/loadingEntries\", true);\n this.uiModel.setProperty(\"/showEntriesTable\", true);\n this.uiModel.setSizeLimit(100_000);\n\n // Call the backend to get cache entries\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.getEntries(...)`, cacheContext);\n await context.invoke();\n const { value: entries } = await context.requestObject();\n for (const entry of entries) {\n entry.tags = entry.tags.join(\", \");\n }\n\n this.uiModel.setProperty(\"/cacheEntries\", entries);\n\n } catch (error) {\n console.error(\"Error loading cache entries:\", error);\n MessageBox.error(await this.i18nText(\"msgLoadEntriesFailed\"));\n } finally {\n this.uiModel.setProperty(\"/loadingEntries\", false);\n }\n }\n\n /**\n * Handle statistics row selection\n */\n public onMetricsRowSelect(event: Table$RowSelectionChangeEvent): void {\n const selectedRow = event.getParameter(\"rowContext\");\n if (selectedRow) {\n const metric = selectedRow.getObject() as any;\n const cacheName = this.getView().getElementBinding().getBoundContext().getProperty(\"name\");\n\n // Navigate to single metric view\n this.getRouter().navTo(\"singleMetric\", {\n cache: cacheName,\n metricId: metric.ID\n });\n\n // Set layout to three columns\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n }\n }\n\n /**\n * Set cache entry\n */\n public async onSetKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/createKey\");\n const value = this.uiModel.getProperty(\"/createValue\");\n const ttl = this.uiModel.getProperty(\"/createTtl\");\n\n if (!key || !value) {\n MessageBox.error(await this.i18nText(\"msgProvideKeyValue\"));\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setEntry(...)`, cacheContext);\n context.setParameter(\"key\", key);\n context.setParameter(\"value\", value);\n context.setParameter(\"ttl\", ttl);\n await context.invoke();\n\n\n MessageToast.show(await this.i18nText(\"msgEntryCreated\"));\n\n // Clear form\n this.uiModel.setProperty(\"/createKey\", \"\");\n this.uiModel.setProperty(\"/createValue\", \"\");\n this.uiModel.setProperty(\"/createTtl\", 3600);\n\n } catch (error) {\n console.error(\"Error setting cache entry:\", error);\n MessageBox.error(await this.i18nText(\"msgCreateEntryFailed\"));\n }\n }\n\n /**\n * Get cache entry\n */\n public async onGetKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/getKey\");\n\n if (!key) {\n MessageBox.error(await this.i18nText(\"msgProvideKey\"));\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.getEntry(...)`, cacheContext);\n action.setParameter(\"key\", key);\n await action.invoke();\n\n const result = await action.requestObject();\n this.uiModel.setProperty(\"/getValue\", result.value || (await this.i18nText(\"msgNotFound\")));\n\n } catch (error) {\n console.error(\"Error getting cache entry:\", error);\n this.uiModel.setProperty(\"/getValue\", await this.i18nText(\"msgGetEntryError\"));\n }\n }\n\n /**\n * Delete cache entry\n */\n public async onDeleteKey(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n const key = this.uiModel.getProperty(\"/deleteKey\");\n\n if (!key) {\n MessageBox.error(await this.i18nText(\"msgProvideKey\"));\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.deleteEntry(...)`, cacheContext);\n context.setParameter(\"key\", key);\n await context.invoke();\n\n MessageToast.show(await this.i18nText(\"msgEntryDeleted\"));\n\n // Clear form\n this.uiModel.setProperty(\"/deleteKey\", \"\");\n\n } catch (error) {\n console.error(\"Error deleting cache entry:\", error);\n MessageBox.error(await this.i18nText(\"msgDeleteEntryFailed\"));\n }\n }\n\n /**\n * Enable/disable statistics\n */\n public async onEnableMetricsChange(event: any): Promise<void> {\n const enabled = event.getParameter(\"state\");\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setMetricsEnabled(...)`, cacheContext);\n context.setParameter(\"enabled\", enabled);\n await context.invoke();\n\n MessageToast.show(await this.i18nText(enabled ? \"msgMetricsEnabled\" : \"msgMetricsDisabled\"));\n } catch (error) {\n console.error(\"Error setting metrics enabled:\", error);\n MessageBox.error(await this.i18nText(\"msgFailedUpdateMetrics\"));\n // Revert the switch\n this.uiModel.setProperty(\"/enableMetrics\", !enabled);\n }\n }\n\n /**\n * Enable/disable key tracking\n */\n public async onEnableKeyMetricsChange(event: any): Promise<void> {\n const enabled = event.getParameter(\"state\");\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.setKeyMetricsEnabled(...)`, cacheContext);\n context.setParameter(\"enabled\", enabled);\n await context.invoke();\n\n MessageToast.show(await this.i18nText(enabled ? \"msgKeyMetricsEnabled\" : \"msgKeyMetricsDisabled\"));\n\n } catch (error) {\n console.error(\"Error setting key metrics enabled:\", error);\n MessageBox.error(await this.i18nText(\"msgFailedKeyMetrics\"));\n // Revert the switch\n this.uiModel.setProperty(\"/enableKeyMetrics\", !enabled);\n }\n }\n\n /**\n * Clear cache\n */\n public async onClearCache(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n\n const confirmMsg = await this.i18nText(\"msgConfirmClearCache\");\n MessageBox.confirm(confirmMsg, {\n actions: [MessageBox.Action.OK, MessageBox.Action.CANCEL],\n emphasizedAction: MessageBox.Action.OK,\n onClose: async (action: string) => {\n if (action === MessageBox.Action.OK) {\n try {\n const model = this.getModel() as ODataModel;\n const context = model.bindContext(`plugin.cds_caching.CachingApiService.clear(...)`, cacheContext);\n await context.invoke();\n\n MessageBox.success(await this.i18nText(\"msgCacheCleared\"));\n\n // Refresh the data\n await this.onRefresh();\n\n } catch (error) {\n console.error(\"Error clearing cache:\", error);\n MessageBox.error(await this.i18nText(\"msgClearCacheFailed\"));\n }\n }\n }\n });\n }\n\n /**\n * Handle refresh button press\n */\n public async onRefresh(): Promise<void> {\n if (this.getView().getElementBinding().getBoundContext()) {\n await this.loadStatistics(true);\n await this.loadKeyMetricsData(true);\n }\n }\n\n public handleClose(): void {\n this.getRouter().navTo(\"main\");\n }\n\n public handleFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"MidColumnFullScreen\");\n }\n\n public handleExitFullScreen(): void {\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"TwoColumnsMidExpanded\");\n }\n\n /**\n * Handle key row selection\n */\n public onKeyMetricsRowSelect(event: any): void {\n\n const selectedRow = event.getParameter(\"rowContext\");\n if (selectedRow) {\n const metric = selectedRow.getObject() as any;\n const cacheName = this.getView().getElementBinding().getBoundContext().getProperty(\"name\");\n\n // Navigate to single metric view\n this.getRouter().navTo(\"singleKeyMetric\", {\n cache: cacheName,\n keyMetricId: metric.ID\n });\n\n // Set layout to three columns\n (<JSONModel>this.getModel(\"app\")).setProperty(\"/layout\", \"ThreeColumnsEndExpanded\");\n }\n }\n\n /**\n * Refresh key data\n */\n public async onRefreshKeyMetricsData(): Promise<void> {\n await this.loadKeyMetricsData(true);\n }\n\n public async onRefreshMetricsData(): Promise<void> {\n await this.loadStatistics(true);\n }\n\n public async onShowKeyMetricsMetadata(event: Button$PressEvent): Promise<void> {\n const context = event.getSource().getBindingContext() as Context;\n\n const saveJson = (json: string) => {\n try {\n return JSON.stringify(JSON.parse(json), null, 2)\n } catch (error) {\n return json\n }\n }\n\n const localData = new JSONModel({\n metadata: saveJson(context.getProperty(\"metadata\")),\n subject: saveJson(context.getProperty(\"subject\")),\n query: saveJson(context.getProperty(\"query\")),\n cacheOptions: saveJson(context.getProperty(\"cacheOptions\")),\n keyName: context.getProperty(\"keyName\"),\n });\n\n const e = (s: string) => Cache.escapeFragmentXml(s);\n const tabMeta = e(await this.i18nText(\"keyTabMetadata\"));\n const tabSub = e(await this.i18nText(\"keyTabSubject\"));\n const tabQ = e(await this.i18nText(\"keyTabQuery\"));\n const tabCo = e(await this.i18nText(\"keyTabCacheOptions\"));\n\n const fragment = await Fragment.load({\n definition: `<core:FragmentDefinition xmlns:core=\"sap.ui.core\" xmlns:mvc=\"sap.ui.core.mvc\" xmlns=\"sap.m\" xmlns:form=\"sap.ui.layout.form\">\n <Popover title=\"{localData>/keyName}\" placement=\"Bottom\" contentWidth=\"30rem\">\n <content>\n <IconTabBar>\n <items>\n <IconTabFilter text=\"${tabMeta}\">\n <content>\n <TextArea value=\"{localData>/metadata}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"${tabSub}\" >\n <content>\n <TextArea value=\"{localData>/subject}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"${tabQ}\" >\n <content>\n <TextArea value=\"{localData>/query}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n <IconTabFilter text=\"${tabCo}\" >\n <content>\n <TextArea value=\"{localData>/cacheOptions}\" rows=\"20\" width=\"100%\" editable=\"false\" />\n </content>\n </IconTabFilter>\n </items>\n </IconTabBar>\n </content>\n </Popover>\n </core:FragmentDefinition>`,\n controller: this,\n });\n\n const popover = fragment as Popover;\n popover.setModel(localData, \"localData\");\n popover.openBy(event.getSource());\n }\n\n /**\n * Clear statistics\n */\n public async onClearMetrics(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n if (!cacheContext) {\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearMetrics(...)`, cacheContext);\n await action.invoke();\n\n MessageToast.show(await this.i18nText(\"msgMetricsCleared\"));\n\n // Refresh the data\n await this.onRefreshMetricsData();\n\n } catch (error) {\n console.error(\"Error clearing metrics:\", error);\n MessageBox.error(await this.i18nText(\"msgFailedClearMetrics\"));\n }\n }\n\n /**\n * Clear key metrics\n */\n public async onClearKeyMetrics(): Promise<void> {\n const cacheContext = this.getView().getElementBinding().getBoundContext() as Context;\n if (!cacheContext) {\n return;\n }\n\n try {\n const model = this.getModel() as ODataModel;\n const action = model.bindContext(`plugin.cds_caching.CachingApiService.clearKeyMetrics(...)`, cacheContext);\n await action.invoke();\n\n MessageToast.show(await this.i18nText(\"msgKeyMetricsCleared\"));\n\n // Refresh the data\n await this.onRefreshKeyMetricsData();\n\n } catch (error) {\n console.error(\"Error clearing key metrics:\", error);\n MessageBox.error(await this.i18nText(\"msgFailedClearKeyMetrics\"));\n }\n }\n\n}"],"mappings":"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","ignoreList":[]}
|