flexmonster-mongo-connector
Version:
Custom data source API implementation for MongoDB
60 lines (49 loc) • 2.53 kB
text/typescript
import { ConfigInterface } from "./ConfigInterface";
export class ConfigManager {
private static _instance: ConfigManager = undefined;
private _currentConfig: ConfigInterface = undefined;
private _defaultConfig: ConfigInterface = {
cacheMemoryLimit: 0, //no limit; in MB
cacheEnabled: true,
cacheTimeToLive: 0, //data in cache does not get outdated (in minutes) (cacheTimeToLive)
logsEnabled: false
};
constructor(config?: ConfigInterface) {
if (ConfigManager._instance !== undefined) throw new Error("Initialization failed: "+
"use Singleton.getInstance() instead of new.");
this._currentConfig = this.validateConfig(config);
}
public static getInstance(config?: ConfigInterface): ConfigManager {
if (this._instance === undefined) {
this._instance = new ConfigManager(config);
}
return this._instance;
}
private validateConfig(config: ConfigInterface): ConfigInterface {
if (config === undefined) return this._defaultConfig;
let currentConfig: ConfigInterface = {};
if (config.cacheMemoryLimit !== undefined || config.cacheMemoryLimit !== null) {
currentConfig.cacheMemoryLimit = !isNaN(config.cacheMemoryLimit) && config.cacheMemoryLimit > 0
? config.cacheMemoryLimit
: this._defaultConfig.cacheMemoryLimit;
}
if (config.cacheTimeToLive !== undefined || config.cacheTimeToLive !== null) {
currentConfig.cacheTimeToLive = !isNaN(config.cacheTimeToLive) && config.cacheTimeToLive > 0
? config.cacheTimeToLive
: this._defaultConfig.cacheTimeToLive;
}
currentConfig.cacheEnabled = (config.cacheEnabled !== undefined || config.cacheEnabled !== null)
? (typeof config.cacheEnabled === "boolean" ? config.cacheEnabled : this._defaultConfig.cacheEnabled)
: this._defaultConfig.cacheEnabled
currentConfig.logsEnabled = config.logsEnabled !== undefined || config.logsEnabled !== null
? (typeof config.logsEnabled === "boolean" ? config.logsEnabled : this._defaultConfig.logsEnabled)
: this._defaultConfig.logsEnabled;
return currentConfig;
}
public get currentConfig(): ConfigInterface {
return this._currentConfig;
}
public toString(): string {
return JSON.stringify(this.currentConfig);
}
}