Commit | Line | Data |
---|---|---|
7c72977b JB |
1 | import ChargingStationConfiguration from '../types/ChargingStationConfiguration'; |
2 | import ChargingStationTemplate from '../types/ChargingStationTemplate'; | |
7c72977b | 3 | import LRUCache from 'mnemonist/lru-map-with-delete'; |
c14729f4 | 4 | import Utils from '../utils/Utils'; |
7c72977b JB |
5 | |
6 | enum CacheType { | |
7 | CHARGING_STATION_TEMPLATE = 'chargingStationTemplate', | |
8 | CHARGING_STATION_CONFIGURATION = 'chargingStationConfiguration', | |
9 | } | |
10 | ||
11 | export class ChargingStationCache { | |
12 | private static instance: ChargingStationCache | null = null; | |
13 | private readonly lruCache: LRUCache<string, any>; | |
14 | ||
15 | private constructor() { | |
16 | this.lruCache = new LRUCache<string, any>(1000); | |
17 | } | |
18 | ||
19 | public static getInstance(): ChargingStationCache { | |
20 | if (!ChargingStationCache.instance) { | |
21 | ChargingStationCache.instance = new ChargingStationCache(); | |
22 | } | |
23 | return ChargingStationCache.instance; | |
24 | } | |
25 | ||
26 | public hasChargingStationConfiguration(chargingStationConfigurationHash: string): boolean { | |
27 | return this.has(CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfigurationHash); | |
28 | } | |
29 | ||
30 | public setChargingStationConfiguration( | |
31 | chargingStationConfiguration: ChargingStationConfiguration | |
32 | ): void { | |
c14729f4 | 33 | if (this.isChargingStationConfigurationCacheable(chargingStationConfiguration)) { |
7c72977b JB |
34 | this.set( |
35 | CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfiguration.configurationHash, | |
36 | chargingStationConfiguration | |
37 | ); | |
38 | } | |
39 | } | |
40 | ||
41 | public getChargingStationConfiguration( | |
42 | chargingStationConfigurationHash: string | |
43 | ): ChargingStationConfiguration { | |
44 | return this.get( | |
45 | CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfigurationHash | |
46 | ) as ChargingStationConfiguration; | |
47 | } | |
48 | ||
49 | public deleteChargingStationConfiguration(chargingStationConfigurationHash: string): void { | |
50 | this.delete(CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfigurationHash); | |
51 | } | |
52 | ||
53 | public hasChargingStationTemplate(chargingStationTemplateHash: string): boolean { | |
54 | return this.has(CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplateHash); | |
55 | } | |
56 | ||
57 | public setChargingStationTemplate(chargingStationTemplate: ChargingStationTemplate): void { | |
58 | this.set( | |
59 | CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplate.templateHash, | |
60 | chargingStationTemplate | |
61 | ); | |
62 | } | |
63 | ||
64 | public getChargingStationTemplate(chargingStationTemplateHash: string): ChargingStationTemplate { | |
65 | return this.get( | |
66 | CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplateHash | |
67 | ) as ChargingStationTemplate; | |
68 | } | |
69 | ||
70 | public deleteChargingStationTemplate(chargingStationTemplateHash: string): void { | |
71 | this.delete(CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplateHash); | |
72 | } | |
73 | ||
74 | public clear(): void { | |
75 | this.lruCache.clear(); | |
76 | } | |
77 | ||
78 | private has(key: string): boolean { | |
79 | return this.lruCache.has(key); | |
80 | } | |
81 | ||
82 | private get(key: string): any { | |
83 | return this.lruCache.get(key); | |
84 | } | |
85 | ||
86 | private set(key: string, value: any): void { | |
87 | this.lruCache.set(key, value); | |
88 | } | |
89 | ||
90 | private delete(key: string): void { | |
91 | this.lruCache.delete(key); | |
92 | } | |
c14729f4 JB |
93 | |
94 | private isChargingStationConfigurationCacheable( | |
95 | chargingStationConfiguration: ChargingStationConfiguration | |
96 | ): boolean { | |
97 | return ( | |
98 | !Utils.isNullOrUndefined(chargingStationConfiguration?.configurationKey) && | |
99 | !Utils.isNullOrUndefined(chargingStationConfiguration?.stationInfo) && | |
100 | !Utils.isNullOrUndefined(chargingStationConfiguration?.configurationHash) && | |
101 | !Utils.isEmptyArray(chargingStationConfiguration?.configurationKey) && | |
102 | !Utils.isEmptyObject(chargingStationConfiguration?.stationInfo) && | |
103 | !Utils.isEmptyString(chargingStationConfiguration?.configurationHash) | |
104 | ); | |
105 | } | |
7c72977b | 106 | } |