Commit | Line | Data |
---|---|---|
8114d10e JB |
1 | import LRUCache from 'mnemonist/lru-map-with-delete'; |
2 | ||
17bc43d7 | 3 | import { Bootstrap } from './internal'; |
268a74bb JB |
4 | import type { ChargingStationConfiguration, ChargingStationTemplate } from '../types'; |
5 | import { Utils } from '../utils/Utils'; | |
7c72977b JB |
6 | |
7 | enum CacheType { | |
8 | CHARGING_STATION_TEMPLATE = 'chargingStationTemplate', | |
9 | CHARGING_STATION_CONFIGURATION = 'chargingStationConfiguration', | |
10 | } | |
11 | ||
0e89dd9a JB |
12 | type CacheableType = ChargingStationTemplate | ChargingStationConfiguration; |
13 | ||
268a74bb | 14 | export class SharedLRUCache { |
57adbebc | 15 | private static instance: SharedLRUCache | null = null; |
0e89dd9a | 16 | private readonly lruCache: LRUCache<string, CacheableType>; |
7c72977b JB |
17 | |
18 | private constructor() { | |
d1c99c59 | 19 | this.lruCache = new LRUCache<string, CacheableType>( |
c3d8778e JB |
20 | Bootstrap.getInstance().numberOfChargingStationTemplates + |
21 | Bootstrap.getInstance().numberOfChargingStations | |
d1c99c59 | 22 | ); |
7c72977b JB |
23 | } |
24 | ||
57adbebc | 25 | public static getInstance(): SharedLRUCache { |
1ca780f9 | 26 | if (SharedLRUCache.instance === null) { |
57adbebc | 27 | SharedLRUCache.instance = new SharedLRUCache(); |
7c72977b | 28 | } |
57adbebc | 29 | return SharedLRUCache.instance; |
7c72977b JB |
30 | } |
31 | ||
32 | public hasChargingStationConfiguration(chargingStationConfigurationHash: string): boolean { | |
ec690502 | 33 | return this.has(this.getChargingStationConfigurationKey(chargingStationConfigurationHash)); |
7c72977b JB |
34 | } |
35 | ||
36 | public setChargingStationConfiguration( | |
37 | chargingStationConfiguration: ChargingStationConfiguration | |
38 | ): void { | |
c14729f4 | 39 | if (this.isChargingStationConfigurationCacheable(chargingStationConfiguration)) { |
7c72977b | 40 | this.set( |
ec690502 | 41 | this.getChargingStationConfigurationKey(chargingStationConfiguration.configurationHash), |
7c72977b JB |
42 | chargingStationConfiguration |
43 | ); | |
44 | } | |
45 | } | |
46 | ||
47 | public getChargingStationConfiguration( | |
48 | chargingStationConfigurationHash: string | |
49 | ): ChargingStationConfiguration { | |
50 | return this.get( | |
ec690502 | 51 | this.getChargingStationConfigurationKey(chargingStationConfigurationHash) |
7c72977b JB |
52 | ) as ChargingStationConfiguration; |
53 | } | |
54 | ||
55 | public deleteChargingStationConfiguration(chargingStationConfigurationHash: string): void { | |
ec690502 | 56 | this.delete(this.getChargingStationConfigurationKey(chargingStationConfigurationHash)); |
7c72977b JB |
57 | } |
58 | ||
59 | public hasChargingStationTemplate(chargingStationTemplateHash: string): boolean { | |
ec690502 | 60 | return this.has(this.getChargingStationTemplateKey(chargingStationTemplateHash)); |
7c72977b JB |
61 | } |
62 | ||
63 | public setChargingStationTemplate(chargingStationTemplate: ChargingStationTemplate): void { | |
64 | this.set( | |
ec690502 | 65 | this.getChargingStationTemplateKey(chargingStationTemplate.templateHash), |
7c72977b JB |
66 | chargingStationTemplate |
67 | ); | |
68 | } | |
69 | ||
70 | public getChargingStationTemplate(chargingStationTemplateHash: string): ChargingStationTemplate { | |
71 | return this.get( | |
ec690502 | 72 | this.getChargingStationTemplateKey(chargingStationTemplateHash) |
7c72977b JB |
73 | ) as ChargingStationTemplate; |
74 | } | |
75 | ||
76 | public deleteChargingStationTemplate(chargingStationTemplateHash: string): void { | |
ec690502 | 77 | this.delete(this.getChargingStationTemplateKey(chargingStationTemplateHash)); |
7c72977b JB |
78 | } |
79 | ||
80 | public clear(): void { | |
81 | this.lruCache.clear(); | |
82 | } | |
83 | ||
ec690502 | 84 | private getChargingStationConfigurationKey(hash: string): string { |
14ecae6a | 85 | return `${CacheType.CHARGING_STATION_CONFIGURATION}${hash}`; |
ec690502 JB |
86 | } |
87 | ||
88 | private getChargingStationTemplateKey(hash: string): string { | |
14ecae6a | 89 | return `${CacheType.CHARGING_STATION_TEMPLATE}${hash}`; |
ec690502 JB |
90 | } |
91 | ||
7c72977b JB |
92 | private has(key: string): boolean { |
93 | return this.lruCache.has(key); | |
94 | } | |
95 | ||
1895299d | 96 | private get(key: string): CacheableType | undefined { |
7c72977b JB |
97 | return this.lruCache.get(key); |
98 | } | |
99 | ||
0e89dd9a | 100 | private set(key: string, value: CacheableType): void { |
7c72977b JB |
101 | this.lruCache.set(key, value); |
102 | } | |
103 | ||
104 | private delete(key: string): void { | |
105 | this.lruCache.delete(key); | |
106 | } | |
c14729f4 JB |
107 | |
108 | private isChargingStationConfigurationCacheable( | |
109 | chargingStationConfiguration: ChargingStationConfiguration | |
110 | ): boolean { | |
111 | return ( | |
a56d48e7 JB |
112 | Utils.isNullOrUndefined(chargingStationConfiguration?.configurationKey) === false && |
113 | Utils.isNullOrUndefined(chargingStationConfiguration?.stationInfo) === false && | |
114 | Utils.isNullOrUndefined(chargingStationConfiguration?.configurationHash) === false && | |
53ac516c | 115 | Utils.isNotEmptyArray(chargingStationConfiguration?.configurationKey) === true && |
a56d48e7 | 116 | Utils.isEmptyObject(chargingStationConfiguration?.stationInfo) === false && |
5a2a53cf | 117 | Utils.isNotEmptyString(chargingStationConfiguration?.configurationHash) === true |
c14729f4 JB |
118 | ); |
119 | } | |
7c72977b | 120 | } |