[API] Refactor out application initialization

...to simplify insertion of an imperative bundle registry,
WTD-450.
This commit is contained in:
Victor Woeltjen 2016-01-06 10:44:53 -08:00
parent 019e04f9ab
commit fdc875379f
3 changed files with 103 additions and 66 deletions

View File

@ -0,0 +1,99 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*global define, window, requirejs*/
define([
'./Constants',
'./FrameworkInitializer',
'./LogLevel',
'./load/BundleLoader',
'./resolve/ImplementationLoader',
'./resolve/ExtensionResolver',
'./resolve/BundleResolver',
'./resolve/RequireConfigurator',
'./register/CustomRegistrars',
'./register/ExtensionRegistrar',
'./register/ExtensionSorter',
'./bootstrap/ApplicationBootstrapper'
], function (
Constants,
FrameworkInitializer,
LogLevel,
BundleLoader,
ImplementationLoader,
ExtensionResolver,
BundleResolver,
RequireConfigurator,
CustomRegistrars,
ExtensionRegistrar,
ExtensionSorter,
ApplicationBootstrapper
) {
'use strict';
function FrameworkLayer($http, $log) {
this.$http = $http;
this.$log = $log;
}
FrameworkLayer.prototype.initializeApplication = function (angular, logLevel) {
var $http = this.$http,
$log = this.$log,
app = angular.module(Constants.MODULE_NAME, ["ngRoute"]),
loader = new BundleLoader($http, $log),
resolver = new BundleResolver(
new ExtensionResolver(
new ImplementationLoader(require),
$log
),
new RequireConfigurator(requirejs),
$log
),
registrar = new ExtensionRegistrar(
app,
new CustomRegistrars(app, $log),
new ExtensionSorter($log),
$log
),
bootstrapper = new ApplicationBootstrapper(
angular,
window.document,
$log
),
initializer = new FrameworkInitializer(
loader,
resolver,
registrar,
bootstrapper
);
// Apply logging levels; this must be done now, before the
// first log statement.
new LogLevel(logLevel).configure(app, $log);
// Initialize the application
$log.info("Initializing application.");
initializer.runApplication(Constants.BUNDLE_LISTING_FILE);
};
return FrameworkLayer;
});

View File

@ -43,36 +43,14 @@ define(
'../lib/es6-promise-2.0.0.min',
'../lib/angular.min',
'../lib/angular-route.min',
'./Constants',
'./FrameworkInitializer',
'./LogLevel',
'./load/BundleLoader',
'./resolve/ImplementationLoader',
'./resolve/ExtensionResolver',
'./resolve/BundleResolver',
'./resolve/RequireConfigurator',
'./register/CustomRegistrars',
'./register/ExtensionRegistrar',
'./register/ExtensionSorter',
'./bootstrap/ApplicationBootstrapper'
'./FrameworkLayer'
],
function (
require,
es6promise,
angular,
angularRoute,
Constants,
FrameworkInitializer,
LogLevel,
BundleLoader,
ImplementationLoader,
ExtensionResolver,
BundleResolver,
RequireConfigurator,
CustomRegistrars,
ExtensionRegistrar,
ExtensionSorter,
ApplicationBootstrapper
FrameworkLayer
) {
"use strict";
@ -89,49 +67,10 @@ define(
// Polyfill Promise, in case browser does not natively provide Promise
window.Promise = window.Promise || es6promise.Promise;
// Wire up framework layer components necessary to complete framework
// initialization phases.
function initializeApplication($http, $log) {
var app = angular.module(Constants.MODULE_NAME, ["ngRoute"]),
loader = new BundleLoader($http, $log),
resolver = new BundleResolver(
new ExtensionResolver(
new ImplementationLoader(require),
$log
),
new RequireConfigurator(requirejs),
$log
),
registrar = new ExtensionRegistrar(
app,
new CustomRegistrars(app, $log),
new ExtensionSorter($log),
$log
),
bootstrapper = new ApplicationBootstrapper(
angular,
window.document,
$log
),
initializer = new FrameworkInitializer(
loader,
resolver,
registrar,
bootstrapper
);
// Apply logging levels; this must be done now, before the
// first log statement.
new LogLevel(logLevel()).configure(app, $log);
// Initialize the application
$log.info("Initializing application.");
initializer.runApplication(Constants.BUNDLE_LISTING_FILE);
}
// Reconfigure base url, since bundle paths will all be relative
// to the root now.
requirejs.config({ "baseUrl": "" });
injector.invoke(['$http', '$log', initializeApplication]);
injector.instantiate(['$http', '$log', FrameworkLayer])
.initializeApplication(angular, logLevel());
}
);

View File

@ -47,7 +47,6 @@ define(
function BundleLoader($http, $log) {
this.$http = $http;
this.$log = $log;
}
/**