blob: 288d54df33f6d2f3cee24c3697acaa39551a1f8a [file] [log] [blame]
Sean Condon83fc39f2018-04-19 18:56:13 +01001/*
Sean Condon5ca00262018-09-06 17:55:25 +01002 * Copyright 2018-present Open Networking Foundation
Sean Condon83fc39f2018-04-19 18:56:13 +01003 *
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 */
17import { Injectable } from '@angular/core';
Sean Condon5ca00262018-09-06 17:55:25 +010018import { LogService } from '../log.service';
Sean Condon83fc39f2018-04-19 18:56:13 +010019import { WebSocketService } from '../remote/websocket.service';
20
21/**
22 * A definition of Lion data
23 */
Sean Condon5ca00262018-09-06 17:55:25 +010024export interface Lion {
Sean Condon83fc39f2018-04-19 18:56:13 +010025 locale: any;
26 lion: any;
27}
28
29/**
30 * ONOS GUI -- Lion -- Localization Utilities
31 */
Sean Condonfd6d11b2018-06-02 20:29:49 +010032@Injectable({
33 providedIn: 'root',
34})
Sean Condon83fc39f2018-04-19 18:56:13 +010035export class LionService {
36
Sean Condon2bd11b72018-06-15 08:00:48 +010037 ubercache: any[] = [];
Sean Condon28ecc5f2018-06-25 12:50:16 +010038 loadCbs = new Map<string, () => void>([]); // A map of functions
Sean Condon83fc39f2018-04-19 18:56:13 +010039
Sean Condonfd6d11b2018-06-02 20:29:49 +010040 /**
41 * Handler for uberlion event from WSS
42 */
43 uberlion(data: Lion) {
44 this.ubercache = data.lion;
45
46 this.log.info('LION service: Locale... [' + data.locale + ']');
47 this.log.info('LION service: Bundles installed...');
48
49 for (const p in this.ubercache) {
50 if (this.ubercache[p]) {
51 this.log.info(' :=> ', p);
52 }
53 }
Sean Condon28ecc5f2018-06-25 12:50:16 +010054 // If any component had registered a callback, call it now
55 // that LION is loaded
56 for (const cbname of this.loadCbs.keys()) {
57 this.log.debug('Updating', cbname, 'with LION');
58 this.loadCbs.get(cbname)();
Sean Condon2bd11b72018-06-15 08:00:48 +010059 }
Sean Condonfd6d11b2018-06-02 20:29:49 +010060
61 this.log.debug('LION service: uber-lion bundle received:', data);
62 }
63
Sean Condon83fc39f2018-04-19 18:56:13 +010064 constructor(
65 private log: LogService,
66 private wss: WebSocketService
67 ) {
Sean Condonfd6d11b2018-06-02 20:29:49 +010068 this.wss.bindHandlers(new Map<string, (data) => void>([
69 ['uberlion', (data) => this.uberlion(data) ]
70 ]));
Sean Condon83fc39f2018-04-19 18:56:13 +010071 this.log.debug('LionService constructed');
72 }
73
Sean Condonfd6d11b2018-06-02 20:29:49 +010074 /**
75 * Returns a lion bundle (function) for the given bundle ID (string)
Sean Condon83fc39f2018-04-19 18:56:13 +010076 * returns a function that takes a string and returns a string
77 */
78 bundle(bundleId: string): (string) => string {
Sean Condon2bd11b72018-06-15 08:00:48 +010079 let bundleObj = this.ubercache[bundleId];
Sean Condon83fc39f2018-04-19 18:56:13 +010080
Sean Condon2bd11b72018-06-15 08:00:48 +010081 if (!bundleObj) {
Sean Condon83fc39f2018-04-19 18:56:13 +010082 this.log.warn('No lion bundle registered:', bundleId);
Sean Condon2bd11b72018-06-15 08:00:48 +010083 bundleObj = {};
Sean Condon83fc39f2018-04-19 18:56:13 +010084 }
85
Sean Condon2bd11b72018-06-15 08:00:48 +010086 return (key) => {
Sean Condonb0a196a2019-04-19 09:50:44 +010087 return bundleObj[key] || '?' + key + '?';
Sean Condon2bd11b72018-06-15 08:00:48 +010088 };
Sean Condon83fc39f2018-04-19 18:56:13 +010089 }
Sean Condon83fc39f2018-04-19 18:56:13 +010090}