-import ChargingStationConfiguration from '../types/ChargingStationConfiguration';
-import ChargingStationTemplate from '../types/ChargingStationTemplate';
-import LRUCache from 'mnemonist/lru-map-with-delete';
-import Utils from '../utils/Utils';
+import LRUCache from 'mnemonist/lru-map-with-delete.js';
+
+import { Bootstrap } from './Bootstrap';
+import type { ChargingStationConfiguration, ChargingStationTemplate } from '../types';
+import { isEmptyObject, isNotEmptyArray, isNotEmptyString, isNullOrUndefined } from '../utils';
enum CacheType {
- CHARGING_STATION_TEMPLATE = 'chargingStationTemplate',
- CHARGING_STATION_CONFIGURATION = 'chargingStationConfiguration',
+ chargingStationTemplate = 'chargingStationTemplate',
+ chargingStationConfiguration = 'chargingStationConfiguration',
}
-type CacheableType = ChargingStationTemplate | ChargingStationConfiguration;
+type CacheValueType = ChargingStationTemplate | ChargingStationConfiguration;
-export default class SharedLRUCache {
+export class SharedLRUCache {
private static instance: SharedLRUCache | null = null;
- private readonly lruCache: LRUCache<string, CacheableType>;
+ private readonly lruCache: LRUCache<string, CacheValueType>;
private constructor() {
- this.lruCache = new LRUCache<string, CacheableType>(1000);
+ this.lruCache = new LRUCache<string, CacheValueType>(
+ Bootstrap.getInstance().numberOfChargingStationTemplates +
+ Bootstrap.getInstance().numberOfChargingStations,
+ );
}
public static getInstance(): SharedLRUCache {
- if (!SharedLRUCache.instance) {
+ if (SharedLRUCache.instance === null) {
SharedLRUCache.instance = new SharedLRUCache();
}
return SharedLRUCache.instance;
}
public setChargingStationConfiguration(
- chargingStationConfiguration: ChargingStationConfiguration
+ chargingStationConfiguration: ChargingStationConfiguration,
): void {
if (this.isChargingStationConfigurationCacheable(chargingStationConfiguration)) {
this.set(
- this.getChargingStationConfigurationKey(chargingStationConfiguration.configurationHash),
- chargingStationConfiguration
+ this.getChargingStationConfigurationKey(chargingStationConfiguration.configurationHash!),
+ chargingStationConfiguration,
);
}
}
public getChargingStationConfiguration(
- chargingStationConfigurationHash: string
+ chargingStationConfigurationHash: string,
): ChargingStationConfiguration {
return this.get(
- this.getChargingStationConfigurationKey(chargingStationConfigurationHash)
+ this.getChargingStationConfigurationKey(chargingStationConfigurationHash),
) as ChargingStationConfiguration;
}
public setChargingStationTemplate(chargingStationTemplate: ChargingStationTemplate): void {
this.set(
- this.getChargingStationTemplateKey(chargingStationTemplate.templateHash),
- chargingStationTemplate
+ this.getChargingStationTemplateKey(chargingStationTemplate.templateHash!),
+ chargingStationTemplate,
);
}
public getChargingStationTemplate(chargingStationTemplateHash: string): ChargingStationTemplate {
return this.get(
- this.getChargingStationTemplateKey(chargingStationTemplateHash)
+ this.getChargingStationTemplateKey(chargingStationTemplateHash),
) as ChargingStationTemplate;
}
}
private getChargingStationConfigurationKey(hash: string): string {
- return CacheType.CHARGING_STATION_CONFIGURATION + hash;
+ return `${CacheType.chargingStationConfiguration}${hash}`;
}
private getChargingStationTemplateKey(hash: string): string {
- return CacheType.CHARGING_STATION_TEMPLATE + hash;
+ return `${CacheType.chargingStationTemplate}${hash}`;
}
private has(key: string): boolean {
return this.lruCache.has(key);
}
- private get(key: string): CacheableType {
+ private get(key: string): CacheValueType | undefined {
return this.lruCache.get(key);
}
- private set(key: string, value: CacheableType): void {
+ private set(key: string, value: CacheValueType): void {
this.lruCache.set(key, value);
}
}
private isChargingStationConfigurationCacheable(
- chargingStationConfiguration: ChargingStationConfiguration
+ chargingStationConfiguration: ChargingStationConfiguration,
): boolean {
return (
- !Utils.isNullOrUndefined(chargingStationConfiguration?.configurationKey) &&
- !Utils.isNullOrUndefined(chargingStationConfiguration?.stationInfo) &&
- !Utils.isNullOrUndefined(chargingStationConfiguration?.configurationHash) &&
- !Utils.isEmptyArray(chargingStationConfiguration?.configurationKey) &&
- !Utils.isEmptyObject(chargingStationConfiguration?.stationInfo) &&
- !Utils.isEmptyString(chargingStationConfiguration?.configurationHash)
+ isNullOrUndefined(chargingStationConfiguration?.configurationKey) === false &&
+ isNullOrUndefined(chargingStationConfiguration?.stationInfo) === false &&
+ isNullOrUndefined(chargingStationConfiguration?.automaticTransactionGenerator) === false &&
+ isNullOrUndefined(chargingStationConfiguration?.configurationHash) === false &&
+ isNotEmptyArray(chargingStationConfiguration?.configurationKey) === true &&
+ isEmptyObject(chargingStationConfiguration.stationInfo!) === false &&
+ isEmptyObject(chargingStationConfiguration.automaticTransactionGenerator!) === false &&
+ isNotEmptyString(chargingStationConfiguration?.configurationHash) === true
);
}
}