Feature-9518: Scale-in/Scale-out commands triggered from the UI
[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 { ComposePackages } from 'ComposePackages';
54 import { ConfirmationTopologyComponent } from 'ConfirmationTopology';
55 import { DeleteComponent } from 'DeleteComponent';
56 import { DeviceCheckService } from 'DeviceCheckService';
57 import { GoToTopDirective } from 'GoToTopDirective';
58 import { InstantiateNetSliceTemplateComponent } from 'InstantiateNetSliceTemplate';
59 import { InstantiateNsComponent } from 'InstantiateNs';
60 import { LoaderModule } from 'LoaderModule';
61 import { LoginComponent } from 'LoginComponent';
62 import { NetsliceInstancesActionComponent } from 'NetsliceInstancesActionComponent';
63 import { NetslicePackagesActionComponent } from 'NetslicePackagesAction';
64 import { NSInstancesActionComponent } from 'NSInstancesActionComponent';
65 import { NsPackagesActionComponent } from 'NsPackagesAction';
66 import { PageNotFoundComponent } from 'PageNotFound';
67 import { PDUInstancesActionComponent } from 'PDUInstancesActionComponent';
68 import { ProjectLinkComponent } from 'ProjectLinkComponent';
69 import { ProjectsActionComponent } from 'ProjectsAction';
70 import { ScalingComponent } from 'ScalingComponent';
71 import { SDNControllerActionComponent } from 'SDNControllerActionComponent';
72 import { ShowInfoComponent } from 'ShowInfoComponent';
73 import { SwitchProjectComponent } from 'SwitchProjectComponent';
74 import { UsersActionComponent } from 'UsersActionComponent';
75 import { UserSettingsComponent } from 'UserSettingsComponent';
76 import { VimAccountsActionComponent } from 'VimAccountsAction';
77 import { VNFInstancesActionComponent } from 'VNFInstancesActionComponent';
78 import { VNFLinkComponent } from 'VNFLinkComponent';
79 import { VNFPackagesActionComponent } from 'VNFPackagesAction';
80 import { WIMAccountsActionComponent } from 'WIMAccountsAction';
81
82 /**
83  * Custom angular notifier options
84  */
85 const customNotifierOptions: NotifierOptions = {
86     position: { horizontal: { position: 'right' }, vertical: { position: 'top' } },
87     behaviour: { autoHide: 3000, onClick: 'hide', onMouseover: 'pauseAutoHide' }
88 };
89
90 /**
91  * An NgModule is a class adorned with the @NgModule decorator function.
92  * @NgModule takes a metadata object that tells Angular how to compile and run module code.
93  */
94 @NgModule({
95     declarations: [
96         AppComponent,
97         LayoutComponent,
98         HeaderComponent,
99         SidebarComponent,
100         LoginComponent,
101         PageNotFoundComponent,
102         VNFPackagesActionComponent,
103         NsPackagesActionComponent,
104         NSInstancesActionComponent,
105         VNFInstancesActionComponent,
106         VNFLinkComponent,
107         NetsliceInstancesActionComponent,
108         BreadcrumbComponent,
109         DeleteComponent,
110         NetslicePackagesActionComponent,
111         UsersActionComponent,
112         VimAccountsActionComponent,
113         ProjectsActionComponent,
114         ProjectLinkComponent,
115         UserSettingsComponent,
116         ShowInfoComponent,
117         InstantiateNetSliceTemplateComponent,
118         InstantiateNsComponent,
119         ConfirmationTopologyComponent,
120         ComposePackages,
121         WIMAccountsActionComponent,
122         PDUInstancesActionComponent,
123         SDNControllerActionComponent,
124         SwitchProjectComponent,
125         GoToTopDirective,
126         ScalingComponent
127     ],
128     imports: [
129         NotifierModule.withConfig(customNotifierOptions),
130         CommonModule,
131         BrowserModule,
132         BrowserAnimationsModule,
133         FormsModule,
134         ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }),
135         Ng2SmartTableModule,
136         CodemirrorModule,
137         NgSelectModule,
138         HttpClientModule,
139         TranslateModule.forRoot({
140             loader: {
141                 provide: TranslateLoader,
142                 useFactory: HttpLoaderFactory,
143                 deps: [HttpClient]
144             }
145         }),
146         NgbModule,
147         NgSelectModule,
148         RouterModule.forRoot(appRoutes, { useHash: false, relativeLinkResolution: 'legacy' }),
149         NgIdleKeepaliveModule.forRoot(),
150         LoaderModule
151     ],
152     providers: [
153         {
154             provide: APP_INITIALIZER,
155             useFactory: appInitializerFactory,
156             deps: [TranslateService, Injector],
157             multi: true
158         },
159         {
160             provide: HTTP_INTERCEPTORS,
161             useClass: AuthInterceptorService,
162             multi: true
163         },
164         RestService,
165         AuthenticationService,
166         AuthGuardService,
167         DataService,
168         ProjectService,
169         SharedService,
170         DeviceCheckService
171     ],
172     bootstrap: [AppComponent],
173     entryComponents: [
174         VNFPackagesActionComponent,
175         NsPackagesActionComponent,
176         NSInstancesActionComponent,
177         VNFInstancesActionComponent,
178         VNFLinkComponent,
179         NetsliceInstancesActionComponent,
180         BreadcrumbComponent,
181         DeleteComponent,
182         NetslicePackagesActionComponent,
183         UsersActionComponent,
184         VimAccountsActionComponent,
185         ProjectsActionComponent,
186         ProjectLinkComponent,
187         UserSettingsComponent,
188         ShowInfoComponent,
189         InstantiateNetSliceTemplateComponent,
190         InstantiateNsComponent,
191         ConfirmationTopologyComponent,
192         ComposePackages,
193         WIMAccountsActionComponent,
194         PDUInstancesActionComponent,
195         SDNControllerActionComponent,
196         SwitchProjectComponent,
197         ScalingComponent
198     ]
199 })
200
201 /** Exporting a class @exports AppModule */
202 export class AppModule {
203     /** Variables declared to avoid state-less class */
204     private appModule: string;
205 }
206
207 /**
208  * HttpLoaderFactory is for translate service of the application.
209  */
210 // tslint:disable:function-name
211 export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader {
212     const now: number = new Date().getTime();
213     return new TranslateHttpLoader(http, './assets/i18n/', '.json?locale=' + now);
214 }
215 /**
216  * HttpLoaderFactory is for translate service of the application.
217  */
218 // tslint:disable:function-name
219 export function appInitializerFactory(translate: TranslateService, injector: Injector): Object {
220     // tslint:disable-next-line: no-any
221     return async (): Promise<any> => {
222         await injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
223         translate.setDefaultLang('en');
224         const languageCode: string = localStorage.getItem('languageCode');
225         if (languageCode !== null && languageCode !== undefined && languageCode !== '') {
226             await translate.use(languageCode).toPromise().catch(() => {
227                 translate.setDefaultLang('en');
228             });
229         } else {
230             await translate.use('en').toPromise();
231             localStorage.setItem('languageCode', 'en');
232         }
233     };
234 }