UNPKG

3.01 kBJavaScriptView Raw
1/*
2Kettle Multi-Configuration support
3
4Copyright 2015 OCAD University
5Copyright 2015 Raising the Floor - International
6
7Licensed under the New BSD license. You may not use this file except in
8compliance with this License.
9
10You may obtain a copy of the License at
11https://github.com/fluid-project/kettle/blob/master/LICENSE.txt
12*/
13
14"use strict";
15
16var fluid = require("infusion"),
17 kettle = fluid.registerNamespace("kettle");
18
19fluid.defaults("kettle.multiConfig.config", {
20 gradeNames: ["fluid.component", "{that}.buildMultiKettleConfig"],
21 invokers: {
22 buildMultiKettleConfig: {
23 funcName: "kettle.multiConfig.build",
24 args: "{that}.options.configs"
25 }
26 }
27});
28
29kettle.multiConfig.template = {
30 components: {
31 server: {
32 type: "fluid.component",
33 options: {
34 components: null, // To be filled in
35 events: {
36 onListen: {
37 events: null // To be filled in
38 },
39 onStopped: {
40 events: null // To be filled in
41 }
42 },
43 invokers: {
44 stop: {
45 funcName: "kettle.multiConfig.stopServers",
46 args: null // To be filled in
47 }
48 }
49 }
50 }
51 }
52};
53
54kettle.multiConfig.build = function (servers) {
55 // Build multi-server config parts
56 var components = {};
57 var onListenEvents = {};
58 var onStoppedEvents = {};
59 var serverPaths = [];
60 fluid.each(servers, function (server, configKey) {
61 components[configKey] = kettle.multiConfig.buildComponentForConfig(server.configName, server.configPath);
62 onListenEvents["onListen" + configKey] = "{" + configKey + "}.server.events.onListen";
63 onStoppedEvents["onStopped" + configKey] = "{" + configKey + "}.server.events.onStopped";
64 serverPaths.push("{" + configKey + "}.server");
65 });
66
67 // Make new grade
68 var newGradeDef = fluid.copy(kettle.multiConfig.template);
69 fluid.set(newGradeDef, "components.server.options.components", components);
70 fluid.set(newGradeDef, "components.server.options.events.onListen.events", onListenEvents);
71 fluid.set(newGradeDef, "components.server.options.events.onStopped.events", onStoppedEvents);
72 fluid.set(newGradeDef, "components.server.options.invokers.stop.args", [serverPaths]);
73
74 var newGradeName = "kettle.multiConfig.config." + fluid.allocateGuid();
75 fluid.defaults(newGradeName, newGradeDef);
76
77 return newGradeName;
78};
79
80kettle.multiConfig.buildComponentForConfig = function (configName, configPath) {
81 var type = kettle.config.createDefaults({
82 configName: configName,
83 configPath: configPath
84 });
85 return {
86 type: type
87 };
88};
89
90kettle.multiConfig.stopServers = function (servers) {
91 fluid.each(servers, function (server) {
92 server.stop();
93 });
94};