@itwin/presentation-backend
Version:
Backend of iTwin.js Presentation library
74 lines • 2.63 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
/** @packageDocumentation
* @module Core
*/
import { RegisteredRuleset } from "@itwin/presentation-common";
/**
* Presentation ruleset registry implementation.
* @internal
*/
export class RulesetManagerImpl {
_getNativePlatform;
_registeredRulesets = new Map();
constructor(getNativePlatform) {
this._getNativePlatform = getNativePlatform;
}
/**
* Get a ruleset with the specified id.
*/
get(id) {
const foundRuleset = this._registeredRulesets.get(id);
if (foundRuleset) {
return foundRuleset;
}
const serializedRulesetsArray = this._getNativePlatform().getRulesets(id).result;
const rulesetsArray = JSON.parse(serializedRulesetsArray);
if (0 === rulesetsArray.length) {
return undefined;
}
return this.saveRuleset(rulesetsArray[0].ruleset, rulesetsArray[0].hash, (ruleset) => this.remove(ruleset));
}
/**
* Register the supplied ruleset
*/
add(ruleset) {
const foundRuleset = this._registeredRulesets.get(ruleset.id);
if (foundRuleset) {
return foundRuleset;
}
const hash = this._getNativePlatform().addRuleset(JSON.stringify(ruleset)).result;
return this.saveRuleset(ruleset, hash, (r) => this.remove(r));
}
/**
* Unregister the supplied ruleset
*/
remove(ruleset) {
let rulesetId, rulesetIdentifier;
if (Array.isArray(ruleset)) {
rulesetId = ruleset[0];
rulesetIdentifier = ruleset[1];
}
else {
rulesetId = ruleset.id;
rulesetIdentifier = ruleset.uniqueIdentifier;
}
this._registeredRulesets.delete(rulesetId);
return this._getNativePlatform().removeRuleset(rulesetId, rulesetIdentifier).result;
}
/**
* Remove all rulesets registered in this session.
*/
clear() {
this._getNativePlatform().clearRulesets();
this._registeredRulesets.clear();
}
saveRuleset(ruleset, hash, disposeFunc) {
const newRuleset = new RegisteredRuleset(ruleset, hash, disposeFunc);
this._registeredRulesets.set(newRuleset.id, newRuleset);
return newRuleset;
}
}
//# sourceMappingURL=RulesetManager.js.map