Commit | Line | Data |
---|---|---|
7c72977b JB |
1 | import ChargingStationConfiguration from '../types/ChargingStationConfiguration'; |
2 | import ChargingStationTemplate from '../types/ChargingStationTemplate'; | |
3 | import { ChargingStationUtils } from './ChargingStationUtils'; | |
4 | import LRUCache from 'mnemonist/lru-map-with-delete'; | |
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 { | |
33 | if ( | |
34 | ChargingStationUtils.isChargingStationConfigurationCacheable(chargingStationConfiguration) | |
35 | ) { | |
36 | this.set( | |
37 | CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfiguration.configurationHash, | |
38 | chargingStationConfiguration | |
39 | ); | |
40 | } | |
41 | } | |
42 | ||
43 | public getChargingStationConfiguration( | |
44 | chargingStationConfigurationHash: string | |
45 | ): ChargingStationConfiguration { | |
46 | return this.get( | |
47 | CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfigurationHash | |
48 | ) as ChargingStationConfiguration; | |
49 | } | |
50 | ||
51 | public deleteChargingStationConfiguration(chargingStationConfigurationHash: string): void { | |
52 | this.delete(CacheType.CHARGING_STATION_CONFIGURATION + chargingStationConfigurationHash); | |
53 | } | |
54 | ||
55 | public hasChargingStationTemplate(chargingStationTemplateHash: string): boolean { | |
56 | return this.has(CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplateHash); | |
57 | } | |
58 | ||
59 | public setChargingStationTemplate(chargingStationTemplate: ChargingStationTemplate): void { | |
60 | this.set( | |
61 | CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplate.templateHash, | |
62 | chargingStationTemplate | |
63 | ); | |
64 | } | |
65 | ||
66 | public getChargingStationTemplate(chargingStationTemplateHash: string): ChargingStationTemplate { | |
67 | return this.get( | |
68 | CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplateHash | |
69 | ) as ChargingStationTemplate; | |
70 | } | |
71 | ||
72 | public deleteChargingStationTemplate(chargingStationTemplateHash: string): void { | |
73 | this.delete(CacheType.CHARGING_STATION_TEMPLATE + chargingStationTemplateHash); | |
74 | } | |
75 | ||
76 | public clear(): void { | |
77 | this.lruCache.clear(); | |
78 | } | |
79 | ||
80 | private has(key: string): boolean { | |
81 | return this.lruCache.has(key); | |
82 | } | |
83 | ||
84 | private get(key: string): any { | |
85 | return this.lruCache.get(key); | |
86 | } | |
87 | ||
88 | private set(key: string, value: any): void { | |
89 | this.lruCache.set(key, value); | |
90 | } | |
91 | ||
92 | private delete(key: string): void { | |
93 | this.lruCache.delete(key); | |
94 | } | |
95 | } |