1 | 'use strict';
|
2 |
|
3 | var define = define ? define : require('amdefine')(module);
|
4 |
|
5 | var utils,
|
6 | ClassesHandler,
|
7 | ClassesRegistry,
|
8 | InterfacesRegistry,
|
9 | Interfacer,
|
10 | ExtenderClassProcessor,
|
11 | InterfacerClassProcessor,
|
12 | ServicesContainer,
|
13 | AbstractServiceBuilder,
|
14 | AliasServiceBuilder,
|
15 | ChildrenServiceBuilder,
|
16 | ClassServiceBuilder,
|
17 | DeclinationsServiceBuilder,
|
18 | FactoriesServiceBuilder,
|
19 | ParentServiceBuilder,
|
20 | PropertiesServiceBuilder,
|
21 | TagsServiceBuilder,
|
22 | ParametersConfigurationSectionProcessor,
|
23 | ServicesConfigurationSectionProcessor,
|
24 | DataResolver,
|
25 | DefaultDataInterpreter,
|
26 | RequiredDataInterpreter,
|
27 | ReferencesDataInterpreter,
|
28 | NamespacesDataInterpreter,
|
29 | Namespacer,
|
30 | TypeDataInterpreter,
|
31 | ReferenceResolver,
|
32 | ReferenceType
|
33 | ;
|
34 |
|
35 | if (!module.isClient) {
|
36 | utils = require('./utils');
|
37 | ClassesHandler = require('./object/classes-handler');
|
38 | ClassesRegistry = require('./object/classes-registry');
|
39 | InterfacesRegistry = require('./object/interfaces-registry');
|
40 | Interfacer = require('./object/interfacer');
|
41 | ExtenderClassProcessor = require('./object/class-processor/extender');
|
42 | InterfacerClassProcessor = require('./object/class-processor/interfacer');
|
43 | ServicesContainer = require('./dependency-injection/services-container');
|
44 | AbstractServiceBuilder = require('./dependency-injection/service-builder/abstract');
|
45 | AliasServiceBuilder = require('./dependency-injection/service-builder/alias');
|
46 | ChildrenServiceBuilder = require('./dependency-injection/service-builder/children');
|
47 | ClassServiceBuilder = require('./dependency-injection/service-builder/class');
|
48 | DeclinationsServiceBuilder = require('./dependency-injection/service-builder/declinations');
|
49 | FactoriesServiceBuilder = require('./dependency-injection/service-builder/factories');
|
50 | ParentServiceBuilder = require('./dependency-injection/service-builder/parent');
|
51 | PropertiesServiceBuilder = require('./dependency-injection/service-builder/properties');
|
52 | TagsServiceBuilder = require('./dependency-injection/service-builder/tags');
|
53 | ParametersConfigurationSectionProcessor = require('./configuration/configuration-section/parameters');
|
54 | ServicesConfigurationSectionProcessor = require('./dependency-injection/configuration-section/services');
|
55 | DataResolver = require('./manipulation/data-resolver');
|
56 | DefaultDataInterpreter = require('./manipulation/data-interpreter/default');
|
57 | RequiredDataInterpreter = require('./manipulation/data-interpreter/required');
|
58 | ReferencesDataInterpreter = require('./configuration/data-interpreter/references');
|
59 | NamespacesDataInterpreter = require('./configuration/data-interpreter/namespaces');
|
60 | Namespacer = require('./configuration/namespacer');
|
61 | TypeDataInterpreter = require('./manipulation/data-interpreter/type');
|
62 | ReferenceResolver = require('./manipulation/reference-resolver');
|
63 | ReferenceType = require('./manipulation/reference-type');
|
64 | }
|
65 |
|
66 | define(function(require) {
|
67 | |
68 |
|
69 |
|
70 | if (module.isClient) {
|
71 | utils = require('danf/utils');
|
72 | ClassesHandler = require('danf/object/classes-handler');
|
73 | ClassesRegistry = require('danf/object/classes-registry');
|
74 | InterfacesRegistry = require('danf/object/interfaces-registry');
|
75 | Interfacer = require('danf/object/interfacer');
|
76 | ExtenderClassProcessor = require('danf/object/class-processor/extender');
|
77 | InterfacerClassProcessor = require('danf/object/class-processor/interfacer');
|
78 | ServicesContainer = require('danf/dependency-injection/services-container');
|
79 | AbstractServiceBuilder = require('danf/dependency-injection/service-builder/abstract');
|
80 | AliasServiceBuilder = require('danf/dependency-injection/service-builder/alias');
|
81 | ChildrenServiceBuilder = require('danf/dependency-injection/service-builder/children');
|
82 | ClassServiceBuilder = require('danf/dependency-injection/service-builder/class');
|
83 | DeclinationsServiceBuilder = require('danf/dependency-injection/service-builder/declinations');
|
84 | FactoriesServiceBuilder = require('danf/dependency-injection/service-builder/factories');
|
85 | ParentServiceBuilder = require('danf/dependency-injection/service-builder/parent');
|
86 | PropertiesServiceBuilder = require('danf/dependency-injection/service-builder/properties');
|
87 | TagsServiceBuilder = require('danf/dependency-injection/service-builder/tags');
|
88 | ParametersConfigurationSectionProcessor = require('danf/configuration/configuration-section/parameters');
|
89 | ServicesConfigurationSectionProcessor = require('danf/dependency-injection/configuration-section/services');
|
90 | DataResolver = require('danf/manipulation/data-resolver');
|
91 | DefaultDataInterpreter = require('danf/manipulation/data-interpreter/default');
|
92 | RequiredDataInterpreter = require('danf/manipulation/data-interpreter/required');
|
93 | ReferencesDataInterpreter = require('danf/configuration/data-interpreter/references');
|
94 | NamespacesDataInterpreter = require('danf/configuration/data-interpreter/namespaces');
|
95 | Namespacer = require('danf/configuration/namespacer');
|
96 | TypeDataInterpreter = require('danf/manipulation/data-interpreter/type');
|
97 | ReferenceResolver = require('danf/manipulation/reference-resolver');
|
98 | ReferenceType = require('danf/manipulation/reference-type');
|
99 | }
|
100 |
|
101 | |
102 |
|
103 |
|
104 | function Initializer() {
|
105 | }
|
106 |
|
107 | |
108 |
|
109 |
|
110 |
|
111 |
|
112 |
|
113 | Initializer.prototype.instantiate = function(framework) {
|
114 | framework.set('danf:manipulation.referenceResolver', new ReferenceResolver());
|
115 | var parameterType = new ReferenceType();
|
116 | parameterType.name = '%';
|
117 | parameterType.delimiter = '%';
|
118 | framework.set('danf:manipulation.referenceType.parameter', parameterType);
|
119 | var contextType = new ReferenceType();
|
120 | contextType.name = '@';
|
121 | contextType.delimiter = '@';
|
122 | framework.set('danf:manipulation.referenceType.context', contextType);
|
123 |
|
124 | framework.set('danf:configuration.namespacer', new Namespacer());
|
125 | framework.set('danf:configuration.configurationResolver', new DataResolver());
|
126 | framework.set('danf:configuration.configurationInterpreter.default', new DefaultDataInterpreter());
|
127 | framework.set('danf:configuration.configurationInterpreter.required', new RequiredDataInterpreter());
|
128 | framework.set('danf:configuration.configurationInterpreter.type', new TypeDataInterpreter());
|
129 | framework.set('danf:configuration.configurationInterpreter.references', new ReferencesDataInterpreter());
|
130 | framework.set('danf:configuration.configurationInterpreter.namespaces', new NamespacesDataInterpreter());
|
131 | framework.set('danf:configuration.configurationSection.parameters', new ParametersConfigurationSectionProcessor('parameters'));
|
132 | var configType = new ReferenceType();
|
133 | configType.name = '$';
|
134 | configType.delimiter = '$';
|
135 | framework.set('danf:configuration.referenceType.config', configType);
|
136 |
|
137 | framework.set('danf:object.classesHandler', new ClassesHandler());
|
138 | framework.set('danf:object.interfacer', new Interfacer());
|
139 | framework.set('danf:object.classesRegistry', new ClassesRegistry());
|
140 | framework.set('danf:object.interfacesRegistry', new InterfacesRegistry());
|
141 | framework.set('danf:object.classProcessor.interfacer', new InterfacerClassProcessor());
|
142 | framework.set('danf:object.classProcessor.extender', new ExtenderClassProcessor());
|
143 |
|
144 | framework.set('danf:dependencyInjection.servicesContainer', new ServicesContainer());
|
145 | framework.set('danf:dependencyInjection.configurationSection.services', new ServicesConfigurationSectionProcessor('services'));
|
146 | framework.set('danf:dependencyInjection.serviceBuilder.abstract', new AbstractServiceBuilder());
|
147 | framework.set('danf:dependencyInjection.serviceBuilder.alias', new AliasServiceBuilder());
|
148 | framework.set('danf:dependencyInjection.serviceBuilder.children', new ChildrenServiceBuilder());
|
149 | framework.set('danf:dependencyInjection.serviceBuilder.class', new ClassServiceBuilder());
|
150 | framework.set('danf:dependencyInjection.serviceBuilder.declination', new DeclinationsServiceBuilder());
|
151 | framework.set('danf:dependencyInjection.serviceBuilder.factories', new FactoriesServiceBuilder());
|
152 | framework.set('danf:dependencyInjection.serviceBuilder.parent', new ParentServiceBuilder());
|
153 | framework.set('danf:dependencyInjection.serviceBuilder.properties', new PropertiesServiceBuilder());
|
154 | framework.set('danf:dependencyInjection.serviceBuilder.tags', new TagsServiceBuilder());
|
155 | var serviceType = new ReferenceType();
|
156 | serviceType.name = '#';
|
157 | serviceType.delimiter = '#';
|
158 | serviceType.allowsConcatenation = false;
|
159 | framework.set('danf:dependencyInjection.referenceType.service', serviceType);
|
160 | var serviceTagType = new ReferenceType();
|
161 | serviceTagType.name = '&';
|
162 | serviceTagType.delimiter = '&';
|
163 | serviceTagType.allowsConcatenation = false;
|
164 | framework.set('danf:dependencyInjection.referenceType.serviceTag', serviceTagType);
|
165 | var serviceFactoryType = new ReferenceType();
|
166 | serviceFactoryType.name = '>';
|
167 | serviceFactoryType.delimiter = '>';
|
168 | serviceFactoryType.size = 3;
|
169 | serviceFactoryType.allowsConcatenation = false;
|
170 | framework.set('danf:dependencyInjection.referenceType.serviceFactory', serviceFactoryType);
|
171 | }
|
172 |
|
173 | |
174 |
|
175 |
|
176 |
|
177 |
|
178 |
|
179 | Initializer.prototype.inject = function(framework) {
|
180 | var classesHandler = framework.get('danf:object.classesHandler'),
|
181 | interfacer = framework.get('danf:object.interfacer'),
|
182 | classesRegistry = framework.get('danf:object.classesRegistry'),
|
183 | interfacesRegistry = framework.get('danf:object.interfacesRegistry'),
|
184 | interfacerClassProcessor = framework.get('danf:object.classProcessor.interfacer'),
|
185 | extenderClassProcessor = framework.get('danf:object.classProcessor.extender')
|
186 | ;
|
187 | classesHandler.classesRegistry = classesRegistry;
|
188 | interfacer.interfacesRegistry = interfacesRegistry;
|
189 | interfacerClassProcessor.interfacesRegistry = interfacesRegistry;
|
190 | extenderClassProcessor.classesRegistry = classesRegistry;
|
191 | classesHandler.addClassProcessor(extenderClassProcessor);
|
192 | classesHandler.addClassProcessor(interfacerClassProcessor);
|
193 |
|
194 | var referenceResolver = framework.get('danf:manipulation.referenceResolver'),
|
195 | parameterType = framework.get('danf:manipulation.referenceType.parameter'),
|
196 | contextType = framework.get('danf:manipulation.referenceType.context'),
|
197 | configType = framework.get('danf:configuration.referenceType.config'),
|
198 | serviceType = framework.get('danf:dependencyInjection.referenceType.service'),
|
199 | serviceTagType = framework.get('danf:dependencyInjection.referenceType.serviceTag'),
|
200 | serviceFactoryType = framework.get('danf:dependencyInjection.referenceType.serviceFactory')
|
201 | ;
|
202 | referenceResolver.addReferenceType(parameterType);
|
203 | referenceResolver.addReferenceType(contextType);
|
204 | referenceResolver.addReferenceType(configType);
|
205 | referenceResolver.addReferenceType(serviceType);
|
206 | referenceResolver.addReferenceType(serviceTagType);
|
207 | referenceResolver.addReferenceType(serviceFactoryType);
|
208 |
|
209 | var namespacer = framework.get('danf:configuration.namespacer'),
|
210 | configurationResolver = framework.get('danf:configuration.configurationResolver'),
|
211 | defaultConfigurationInterpreter = framework.get('danf:configuration.configurationInterpreter.default'),
|
212 | requiredConfigurationInterpreter = framework.get('danf:configuration.configurationInterpreter.required'),
|
213 | typeConfigurationInterpreter = framework.get('danf:configuration.configurationInterpreter.type'),
|
214 | referencesConfigurationInterpreter = framework.get('danf:configuration.configurationInterpreter.references'),
|
215 | namespacesConfigurationInterpreter = framework.get('danf:configuration.configurationInterpreter.namespaces'),
|
216 | parametersProcessor = framework.get('danf:configuration.configurationSection.parameters')
|
217 | ;
|
218 | namespacer.addReferenceType(parameterType);
|
219 | namespacer.addReferenceType(contextType);
|
220 | namespacer.addReferenceType(configType);
|
221 | namespacer.addReferenceType(serviceType);
|
222 | namespacer.addReferenceType(serviceTagType);
|
223 | namespacer.addReferenceType(serviceFactoryType);
|
224 | referencesConfigurationInterpreter.namespacer = namespacer;
|
225 | namespacesConfigurationInterpreter.namespacer = namespacer;
|
226 | configurationResolver.addDataInterpreter(defaultConfigurationInterpreter);
|
227 | configurationResolver.addDataInterpreter(requiredConfigurationInterpreter);
|
228 | configurationResolver.addDataInterpreter(typeConfigurationInterpreter);
|
229 | configurationResolver.addDataInterpreter(referencesConfigurationInterpreter);
|
230 | configurationResolver.addDataInterpreter(namespacesConfigurationInterpreter);
|
231 | parametersProcessor.configurationResolver = configurationResolver;
|
232 | parametersProcessor.referenceResolver = referenceResolver;
|
233 | parametersProcessor.namespacer = namespacer;
|
234 |
|
235 | var servicesContainer = framework.get('danf:dependencyInjection.servicesContainer'),
|
236 | servicesProcessor = framework.get('danf:dependencyInjection.configurationSection.services'),
|
237 | abstractServiceBuilder = framework.get('danf:dependencyInjection.serviceBuilder.abstract'),
|
238 | aliasServiceBuilder = framework.get('danf:dependencyInjection.serviceBuilder.alias'),
|
239 | childrenServiceBuilder = framework.get('danf:dependencyInjection.serviceBuilder.children'),
|
240 | classServiceBuilder = framework.get('danf:dependencyInjection.serviceBuilder.class'),
|
241 | declinationServiceBuilder = framework.get('danf:dependencyInjection.serviceBuilder.declination'),
|
242 | factoriesServiceBuilder = framework.get('danf:dependencyInjection.serviceBuilder.factories'),
|
243 | parentServiceBuilder = framework.get('danf:dependencyInjection.serviceBuilder.parent'),
|
244 | propertiesServiceBuilder = framework.get('danf:dependencyInjection.serviceBuilder.properties'),
|
245 | tagsServiceBuilder = framework.get('danf:dependencyInjection.serviceBuilder.tags')
|
246 | ;
|
247 | servicesContainer.referenceResolver = referenceResolver;
|
248 | servicesContainer.interfacer = interfacer;
|
249 | servicesProcessor.configurationResolver = configurationResolver;
|
250 | servicesProcessor.referenceResolver = referenceResolver;
|
251 | servicesProcessor.namespacer = namespacer;
|
252 | servicesProcessor.servicesContainer = servicesContainer;
|
253 | abstractServiceBuilder.servicesContainer = servicesContainer;
|
254 | abstractServiceBuilder.referenceResolver = referenceResolver;
|
255 | aliasServiceBuilder.servicesContainer = servicesContainer;
|
256 | aliasServiceBuilder.referenceResolver = referenceResolver;
|
257 | childrenServiceBuilder.servicesContainer = servicesContainer;
|
258 | childrenServiceBuilder.referenceResolver = referenceResolver;
|
259 | classServiceBuilder.servicesContainer = servicesContainer;
|
260 | classServiceBuilder.referenceResolver = referenceResolver;
|
261 | declinationServiceBuilder.servicesContainer = servicesContainer;
|
262 | declinationServiceBuilder.referenceResolver = referenceResolver;
|
263 | factoriesServiceBuilder.servicesContainer = servicesContainer;
|
264 | factoriesServiceBuilder.referenceResolver = referenceResolver;
|
265 | parentServiceBuilder.servicesContainer = servicesContainer;
|
266 | parentServiceBuilder.referenceResolver = referenceResolver;
|
267 | propertiesServiceBuilder.servicesContainer = servicesContainer;
|
268 | propertiesServiceBuilder.referenceResolver = referenceResolver;
|
269 | propertiesServiceBuilder.interfacer = interfacer;
|
270 | tagsServiceBuilder.servicesContainer = servicesContainer;
|
271 | tagsServiceBuilder.referenceResolver = referenceResolver;
|
272 | servicesContainer.addServiceBuilder(abstractServiceBuilder);
|
273 | servicesContainer.addServiceBuilder(aliasServiceBuilder);
|
274 | servicesContainer.addServiceBuilder(childrenServiceBuilder);
|
275 | servicesContainer.addServiceBuilder(classServiceBuilder);
|
276 | servicesContainer.addServiceBuilder(declinationServiceBuilder);
|
277 | servicesContainer.addServiceBuilder(factoriesServiceBuilder);
|
278 | servicesContainer.addServiceBuilder(parentServiceBuilder);
|
279 | servicesContainer.addServiceBuilder(propertiesServiceBuilder);
|
280 | servicesContainer.addServiceBuilder(tagsServiceBuilder);
|
281 |
|
282 |
|
283 | for (var id in framework.objectsContainer.objects) {
|
284 | servicesContainer.set(id, framework.objectsContainer.objects[id]);
|
285 | }
|
286 | framework.objectsContainer = servicesContainer;
|
287 | }
|
288 |
|
289 | |
290 |
|
291 |
|
292 |
|
293 |
|
294 |
|
295 |
|
296 |
|
297 |
|
298 | Initializer.prototype.process = function(framework, parameters, danf, configuration) {
|
299 | var app = framework.get('danf:app');
|
300 |
|
301 |
|
302 | var servicesContainer = framework.get('danf:dependencyInjection.servicesContainer'),
|
303 | classesHandler = framework.get('danf:object.classesHandler'),
|
304 | classesRegistry = framework.get('danf:object.classesRegistry'),
|
305 | interfacesRegistry = framework.get('danf:object.interfacesRegistry'),
|
306 | interfacerClassProcessor = framework.get('danf:object.classProcessor.interfacer')
|
307 | ;
|
308 |
|
309 | classesRegistry.processConfiguration(danf.classes);
|
310 | interfacesRegistry.processConfiguration(danf.interfaces);
|
311 |
|
312 | interfacerClassProcessor.process(ServicesContainer);
|
313 | interfacerClassProcessor.process(AbstractServiceBuilder);
|
314 | interfacerClassProcessor.process(AliasServiceBuilder);
|
315 | interfacerClassProcessor.process(ChildrenServiceBuilder);
|
316 | interfacerClassProcessor.process(ClassServiceBuilder);
|
317 | interfacerClassProcessor.process(DeclinationsServiceBuilder);
|
318 | interfacerClassProcessor.process(FactoriesServiceBuilder);
|
319 | interfacerClassProcessor.process(ParentServiceBuilder);
|
320 | interfacerClassProcessor.process(PropertiesServiceBuilder);
|
321 | interfacerClassProcessor.process(TagsServiceBuilder);
|
322 |
|
323 | classesHandler.process();
|
324 | servicesContainer.processConfiguration(danf.services, danf.config);
|
325 |
|
326 |
|
327 | classesRegistry = servicesContainer.get('danf:object.classesRegistry');
|
328 | classesRegistry.processConfiguration(danf.classes);
|
329 | interfacesRegistry = servicesContainer.get('danf:object.interfacesRegistry');
|
330 | interfacesRegistry.processConfiguration(danf.interfaces);
|
331 | classesHandler = servicesContainer.get('danf:object.classesHandler');
|
332 | classesHandler.process();
|
333 |
|
334 |
|
335 | var modulesTree = framework.get('danf:configuration.modulesTree'),
|
336 | configurationProcessor = framework.get('danf:configuration.processor')
|
337 | ;
|
338 | modulesTree.build(configuration, danf);
|
339 |
|
340 | var config = configurationProcessor.process(modulesTree);
|
341 | parameters['config'] = config;
|
342 | parameters['flattenConfig'] = utils.flatten(config, 1, ':');
|
343 |
|
344 |
|
345 | classesRegistry.processConfiguration(config.classes || {});
|
346 | interfacesRegistry.processConfiguration(config.interfaces || {});
|
347 | classesHandler.process();
|
348 |
|
349 |
|
350 | servicesContainer.processConfiguration(config.services || {}, parameters['flattenConfig'], true);
|
351 |
|
352 |
|
353 | var sequenceBuilder = framework.get('danf:event.sequenceBuilder'),
|
354 | eventsHandler = framework.get('danf:event.eventsHandler')
|
355 | ;
|
356 | sequenceBuilder.processConfiguration(config.sequences || {}, parameters['flattenConfig']);
|
357 | eventsHandler.processConfiguration(config.events || {});
|
358 | }
|
359 |
|
360 | |
361 |
|
362 |
|
363 | return Initializer;
|
364 | }); |
\ | No newline at end of file |