UNPKG

vulcain-corejs

Version:
94 lines (92 loc) 3.46 kB
"use strict"; const vulcain_configurationsjs_1 = require('vulcain-configurationsjs'); class EventHandlerFactory { constructor() { this.handlers = new Map(); } *allHandlers() { for (let [vk, v] of this.handlers) { for (let [sk, s] of v) { for (let i of s) yield i; } } } register(container, domain, target, actions, handlerMetadata) { let domainName = domain.name; handlerMetadata = handlerMetadata || {}; if (handlerMetadata.schema) { // test if exists let tmp = domain.getSchema(handlerMetadata.schema); handlerMetadata.schema = tmp.name; } for (const action in actions) { let actionMetadata = actions[action]; actionMetadata = actionMetadata || {}; if (actionMetadata.subscribeToSchema) { // test if exists let tmp = domain.getSchema(actionMetadata.subscribeToSchema); actionMetadata.subscribeToSchema = tmp.name; } let keys = [domainName]; let schema = actionMetadata.subscribeToSchema || handlerMetadata.schema || "*"; actionMetadata.subscribeToSchema = schema; actionMetadata.subscribeToAction = actionMetadata.subscribeToAction || "*"; keys.push(actionMetadata.subscribeToAction); let handlerKey = keys.join('.').toLowerCase(); let byActions = this.handlers.get(handlerKey); if (!byActions) { byActions = new Map(); this.handlers.set(handlerKey, byActions); } let bySchemas = byActions.get(schema); if (!bySchemas) { bySchemas = []; byActions.set(schema, bySchemas); } // Merge metadata let item = { methodName: action, metadata: Object.assign({}, handlerMetadata, actionMetadata), handler: target }; bySchemas.push(item); vulcain_configurationsjs_1.System.log.info(null, "Event handler registered for domain %s action %s schema %s", domainName, actionMetadata.subscribeToAction, schema); } } getFilteredHandlers(domain, schema, action) { let d = domain && domain.toLowerCase() + "."; let a = (action && action.toLowerCase()) || "*"; let s = (schema && schema.toLowerCase()) || "*"; let items = []; let key = d + a; let infos = this.handlers.get(key); if (infos) { let tmp = infos.get(s); if (tmp) items = items.concat(tmp); if (s !== "*") { tmp = infos.get("*"); if (tmp) items = items.concat(tmp); } } if (a !== "*") { key = d + "*"; infos = this.handlers.get(key); if (infos) { let tmp = infos.get(s); if (tmp) items = items.concat(tmp); if (s !== "*") { tmp = infos.get("*"); if (tmp) items = items.concat(tmp); } } } return items; } } exports.EventHandlerFactory = EventHandlerFactory; //# sourceMappingURL=eventHandlerFactory.js.map