@pmouli/isy-matter-server
Version:
Service to expose an ISY device as a Matter Border router
108 lines • 3.79 kB
JavaScript
import { Family } from './Definitions/index.js';
import { NodeFactory } from './Devices/NodeFactory.js';
import { ISYDevice } from './ISYDevice.js';
export class Registry {
Global = {};
FamilyLevel = {};
DeviceLevel = {};
NodeDefLevel = {};
ClassLevel = {};
registerGlobal(key, value) {
this.Global[key] = value;
}
registerFamilyLevel(family, key, value) {
this.FamilyLevel[Family[family]] = this.FamilyLevel[Family[family]] ?? {};
this.FamilyLevel[Family[family]][key] = value;
}
registerDeviceLevel(device, key, value) {
this.DeviceLevel[device] = this.DeviceLevel[device] ?? {};
this.DeviceLevel[device][key] = value;
}
registerNodeDefLevel(nodeDefId, key, value) {
this.NodeDefLevel[nodeDefId] = this.NodeDefLevel[nodeDefId] ?? {};
this.NodeDefLevel[nodeDefId][key] = value;
}
registerClassLevel(className, key, value) {
this.ClassLevel[className] = this.ClassLevel[className] ?? {};
this.ClassLevel[className][key] = value;
}
register(key, value, discriminant) {
if (discriminant === undefined) {
this.registerGlobal(key, value);
return;
}
else if (typeof discriminant === 'string') {
this.registerDeviceLevel(discriminant, key, value);
return;
}
else if (typeof discriminant === 'number') {
if (discriminant in Family) {
this.registerFamilyLevel(discriminant, key, value);
return;
}
}
else if (ISYDevice.isNode(discriminant)) {
this.registerNodeDefLevel(discriminant.Class.prototype.nodeDefId, key, value);
for (const nodeDefId in NodeFactory.getImplements(discriminant)) {
this.registerNodeDefLevel(nodeDefId, key, value);
}
this.registerClassLevel(discriminant.Class.name, key, value);
this.registerFamilyLevel(discriminant.Class.family, key, value);
return;
}
else if (ISYDevice.isComposite(discriminant)) {
this.registerClassLevel(discriminant.Class.name, key, value);
return;
}
/*else if(ISYDevice.isComposite(discriminant))
{
this.registerFamilyLevel(discriminant.types, key, value);
return;
}*/ //TODO: Implement Composite Device
}
getGlobal(key) {
return this.Global[key];
}
getFamilyLevel(family, key) {
return this.FamilyLevel[Family[family]]?.[key];
}
getDeviceLevel(device, key) {
return this.DeviceLevel[device]?.[key];
}
getNodeLevel(nodeDefId, key) {
return this.NodeDefLevel[nodeDefId]?.[key];
}
getClassLevel(className, key) {
return this.ClassLevel[className]?.[key];
}
get(device, key) {
if (device.type) {
let d = this.getDeviceLevel(device.type, key);
if (d)
return d;
}
if (ISYDevice.isNode(device)) {
let d = this.getNodeLevel(device.nodeDefId, key);
if (d) {
return d;
}
else {
for (const nodeDefId in NodeFactory.getImplements(device)) {
let d = this.getNodeLevel(nodeDefId, key);
if (d)
return d;
}
}
}
if (ISYDevice.isComposite(device)) {
let d = this.getClassLevel(device.constructor.name, key);
if (d)
return d;
}
let f = this.getFamilyLevel(device.family, key);
if (f)
return f;
return this.getGlobal(key);
}
}
//# sourceMappingURL=Registry.js.map