Feature 10910: Migration of Openstack based VM instances
[osm/NG-UI.git] / src / app / AppModule.ts
1 /*
2  Copyright 2020 TATA ELXSI
3
4  Licensed under the Apache License, Version 2.0 (the 'License');
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7
8     http://www.apache.org/licenses/LICENSE-2.0
9
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15
16  Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
17 */
18 /**
19  * @file Instance Module file
20  */
21 import { CommonModule, LOCATION_INITIALIZED } from '@angular/common';
22 import { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
23 import { APP_INITIALIZER, Injector, NgModule } from '@angular/core';
24 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
25 import { BrowserModule } from '@angular/platform-browser';
26 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
27 import { RouterModule } from '@angular/router';
28 import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
29 import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
30 import { TranslateHttpLoader } from '@ngx-translate/http-loader';
31 import { NotifierModule, NotifierOptions } from 'angular-notifier';
32 import { AuthInterceptorService } from 'AuthInterceptorService';
33 import { HeaderComponent } from 'HeaderComponent';
34 import { LayoutComponent } from 'LayoutComponent';
35 import { Ng2SmartTableModule } from 'ng2-smart-table';
36 import { RestService } from 'RestService';
37 import { SidebarComponent } from 'SidebarComponent';
38 import { AppComponent } from './AppComponent';
39
40 import { appRoutes } from './approutes.module';
41
42 import { DataService } from 'DataService';
43 import { ProjectService } from 'ProjectService';
44 import { SharedService } from 'SharedService';
45
46 import { CodemirrorModule } from '@ctrl/ngx-codemirror';
47 import { NgSelectModule } from '@ng-select/ng-select';
48
49 import { NgIdleKeepaliveModule } from '@ng-idle/keepalive';
50 import { AuthenticationService } from 'AuthenticationService';
51 import { AuthGuardService } from 'AuthGuardService';
52 import { BreadcrumbComponent } from 'BreadCrumb';
53 import { ChangePasswordComponent } from 'ChangePasswordComponent';
54 import { ChangePasswordModule } from 'ChangePasswordModule';
55 import { ComposePackages } from 'ComposePackages';
56 import { ConfirmationTopologyComponent } from 'ConfirmationTopology';
57 import { DeleteComponent } from 'DeleteComponent';
58 import { DeviceCheckService } from 'DeviceCheckService';
59 import { GoToTopDirective } from 'GoToTopDirective';
60 import { InstantiateNetSliceTemplateComponent } from 'InstantiateNetSliceTemplate';
61 import { InstantiateNsComponent } from 'InstantiateNs';
62 import { LoaderModule } from 'LoaderModule';
63 import { LoginComponent } from 'LoginComponent';
64 import { NetsliceInstancesActionComponent } from 'NetsliceInstancesActionComponent';
65 import { NetslicePackagesActionComponent } from 'NetslicePackagesAction';
66 import { NSInstancesActionComponent } from 'NSInstancesActionComponent';
67 import { NsPackagesActionComponent } from 'NsPackagesAction';
68 import { PageNotFoundComponent } from 'PageNotFound';
69 import { PDUInstancesActionComponent } from 'PDUInstancesActionComponent';
70 import { ProjectLinkComponent } from 'ProjectLinkComponent';
71 import { ProjectsActionComponent } from 'ProjectsAction';
72 import { ScalingComponent } from 'ScalingComponent';
73 import { SDNControllerActionComponent } from 'SDNControllerActionComponent';
74 import { SharedModule } from 'SharedModule';
75 import { ShowInfoComponent } from 'ShowInfoComponent';
76 import { SwitchProjectComponent } from 'SwitchProjectComponent';
77 import { UsersActionComponent } from 'UsersActionComponent';
78 import { UserSettingsComponent } from 'UserSettingsComponent';
79 import { VimAccountsActionComponent } from 'VimAccountsAction';
80 import { VmMigrationComponent } from 'VmMigrationComponent';
81 import { VNFInstancesActionComponent } from 'VNFInstancesActionComponent';
82 import { VNFLinkComponent } from 'VNFLinkComponent';
83 import { VNFPackagesActionComponent } from 'VNFPackagesAction';
84 import { WIMAccountsActionComponent } from 'WIMAccountsAction';
85
86 /**
87  * Custom angular notifier options
88  */
89 const customNotifierOptions: NotifierOptions = {
90     position: { horizontal: { position: 'right' }, vertical: { position: 'top' } },
91     behaviour: { autoHide: 3000, onClick: 'hide', onMouseover: 'pauseAutoHide' }
92 };
93
94 /**
95  * An NgModule is a class adorned with the @NgModule decorator function.
96  * @NgModule takes a metadata object that tells Angular how to compile and run module code.
97  */
98 @NgModule({
99     declarations: [
100         AppComponent,
101         LayoutComponent,
102         HeaderComponent,
103         SidebarComponent,
104         LoginComponent,
105         PageNotFoundComponent,
106         VNFPackagesActionComponent,
107         NsPackagesActionComponent,
108         NSInstancesActionComponent,
109         VNFInstancesActionComponent,
110         VNFLinkComponent,
111         NetsliceInstancesActionComponent,
112         BreadcrumbComponent,
113         DeleteComponent,
114         NetslicePackagesActionComponent,
115         UsersActionComponent,
116         VimAccountsActionComponent,
117         ProjectsActionComponent,
118         ProjectLinkComponent,
119         UserSettingsComponent,
120         ShowInfoComponent,
121         InstantiateNetSliceTemplateComponent,
122         InstantiateNsComponent,
123         ConfirmationTopologyComponent,
124         ComposePackages,
125         WIMAccountsActionComponent,
126         PDUInstancesActionComponent,
127         SDNControllerActionComponent,
128         SwitchProjectComponent,
129         GoToTopDirective,
130         ScalingComponent,
131         ChangePasswordComponent,
132         VmMigrationComponent
133     ],
134     imports: [
135         NotifierModule.withConfig(customNotifierOptions),
136         CommonModule,
137         BrowserModule,
138         BrowserAnimationsModule,
139         FormsModule,
140         ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
141         Ng2SmartTableModule,
142         CodemirrorModule,
143         NgSelectModule,
144         HttpClientModule,
145         TranslateModule.forRoot({
146             loader: {
147                 provide: TranslateLoader,
148                 useFactory: HttpLoaderFactory,
149                 deps: [HttpClient]
150             }
151         }),
152         NgbModule,
153         NgSelectModule,
154         RouterModule.forRoot(appRoutes, { useHash: false, relativeLinkResolution: 'legacy' }),
155         NgIdleKeepaliveModule.forRoot(),
156         LoaderModule,
157         SharedModule,
158         ChangePasswordModule
159     ],
160     providers: [
161         {
162             provide: APP_INITIALIZER,
163             useFactory: appInitializerFactory,
164             deps: [TranslateService, Injector],
165             multi: true
166         },
167         {
168             provide: HTTP_INTERCEPTORS,
169             useClass: AuthInterceptorService,
170             multi: true
171         },
172         RestService,
173         AuthenticationService,
174         AuthGuardService,
175         DataService,
176         ProjectService,
177         SharedService,
178         DeviceCheckService
179     ],
180     bootstrap: [AppComponent],
181     entryComponents: [
182         VNFPackagesActionComponent,
183         NsPackagesActionComponent,
184         NSInstancesActionComponent,
185         VNFInstancesActionComponent,
186         VNFLinkComponent,
187         NetsliceInstancesActionComponent,
188         BreadcrumbComponent,
189         DeleteComponent,
190         NetslicePackagesActionComponent,
191         UsersActionComponent,
192         VimAccountsActionComponent,
193         ProjectsActionComponent,
194         ProjectLinkComponent,
195         UserSettingsComponent,
196         ShowInfoComponent,
197         InstantiateNetSliceTemplateComponent,
198         InstantiateNsComponent,
199         ConfirmationTopologyComponent,
200         ComposePackages,
201         WIMAccountsActionComponent,
202         PDUInstancesActionComponent,
203         SDNControllerActionComponent,
204         SwitchProjectComponent,
205         ScalingComponent,
206         ChangePasswordComponent,
207         VmMigrationComponent
208     ]
209 })
210
211 /** Exporting a class @exports AppModule */
212 export class AppModule {
213     /** Variables declared to avoid state-less class */
214     private appModule: string;
215 }
216
217 /**
218  * HttpLoaderFactory is for translate service of the application.
219  */
220 // tslint:disable:function-name
221 export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
222     const now: number = new Date().getTime();
223     return new TranslateHttpLoader(http, './assets/i18n/', '.json?locale=' + now);
224 }
225 /**
226  * HttpLoaderFactory is for translate service of the application.
227  */
228 // tslint:disable:function-name
229 export function appInitializerFactory(translate: TranslateService, injector: Injector): Object {
230     // tslint:disable-next-line: no-any
231     return async (): Promise<any> => {
232         await injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
233         translate.setDefaultLang('en');
234         const languageCode: string = localStorage.getItem('languageCode');
235         if (languageCode !== null && languageCode !== undefined && languageCode !== '') {
236             await translate.use(languageCode).toPromise().catch((): void => {
237                 translate.setDefaultLang('en');
238             });
239         } else {
240             await translate.use('en').toPromise();
241             localStorage.setItem('languageCode', 'en');
242         }
243     };
244 }