Only run GitHub CI code coverage when needed
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStationCache.ts
CommitLineData
7c72977b
JB
1import ChargingStationConfiguration from '../types/ChargingStationConfiguration';
2import ChargingStationTemplate from '../types/ChargingStationTemplate';
7c72977b 3import LRUCache from 'mnemonist/lru-map-with-delete';
c14729f4 4import Utils from '../utils/Utils';
7c72977b
JB
5
6enum CacheType {
7 CHARGING_STATION_TEMPLATE = 'chargingStationTemplate',
8 CHARGING_STATION_CONFIGURATION = 'chargingStationConfiguration',
9}
10
11export 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}