blob: 0ebdb557dd7b05676e5df7b52ea1e1d6767550e3 [file] [log] [blame]
Simon Huntc7ae7952015-04-08 18:59:27 -07001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
Simon Huntc7ae7952015-04-08 18:59:27 -07003 *
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
17/*
18 ONOS GUI -- Util -- User Preference Service
19 */
20(function () {
21 'use strict';
22
23 // injected refs
Thomas Vachuska0af26912016-03-21 21:37:30 -070024 var $log, fs, wss;
Simon Huntc7ae7952015-04-08 18:59:27 -070025
26 // internal state
Simon Huntf51bf462016-06-29 16:22:57 -070027 var cache = {},
28 listeners = [];
Simon Huntc7ae7952015-04-08 18:59:27 -070029
Simon Hunt8a119b02016-03-29 16:00:32 -070030 // returns the preference settings for the specified key
31 function getPrefs(name, defaults, qparams) {
32 var obj = angular.extend({}, defaults || {}, cache[name] || {});
33
34 // if query params are specified, they override...
35 if (fs.isO(qparams)) {
36 angular.forEach(obj, function (v, k) {
37 if (qparams.hasOwnProperty(k)) {
38 obj[k] = qparams[k];
39 }
40 });
41 }
42 return obj;
Simon Huntc7ae7952015-04-08 18:59:27 -070043 }
44
Simon Huntfcbde892015-04-16 12:05:28 -070045 // converts string values to numbers for selected (or all) keys
46 function asNumbers(obj, keys) {
47 if (!obj) return null;
48
49 if (!keys) {
50 // do them all
51 angular.forEach(obj, function (v, k) {
52 obj[k] = Number(obj[k]);
53 });
54 } else {
55 keys.forEach(function (k) {
56 obj[k] = Number(obj[k]);
57 });
58 }
59 return obj;
60 }
61
Simon Huntc7ae7952015-04-08 18:59:27 -070062 function setPrefs(name, obj) {
Thomas Vachuska0af26912016-03-21 21:37:30 -070063 // keep a cached copy of the object and send an update to server
Simon Huntc7ae7952015-04-08 18:59:27 -070064 cache[name] = obj;
Thomas Vachuska0af26912016-03-21 21:37:30 -070065 wss.sendEvent('updatePrefReq', { key: name, value: obj });
66 }
67
68 function updatePrefs(data) {
69 $log.info('User properties updated');
Thomas Vachuska341310c2016-03-24 10:14:13 -070070 cache = data;
Simon Hunt8a119b02016-03-29 16:00:32 -070071 listeners.forEach(function (lsnr) { lsnr(); });
Thomas Vachuska341310c2016-03-24 10:14:13 -070072 }
73
74 function addListener(listener) {
75 listeners.push(listener);
76 }
77
78 function removeListener(listener) {
79 listeners = listeners.filter(function(obj) { return obj === listener; });
Simon Huntc7ae7952015-04-08 18:59:27 -070080 }
81
82 angular.module('onosUtil')
Thomas Vachuska0af26912016-03-21 21:37:30 -070083 .factory('PrefsService', ['$log', 'FnService', 'WebSocketService',
84 function (_$log_, _fs_, _wss_) {
Simon Huntc7ae7952015-04-08 18:59:27 -070085 $log = _$log_;
Simon Hunt4deb0e82015-06-10 16:18:25 -070086 fs = _fs_;
Thomas Vachuska0af26912016-03-21 21:37:30 -070087 wss = _wss_;
88
Matteo Scandolocf060772016-05-13 15:54:44 -070089 try {
90 cache = angular.isDefined(userPrefs) ? userPrefs : {};
91 }
92 catch(e){
93 // browser throws error for non-existing globals
94 cache = {}
95 }
Thomas Vachuska0af26912016-03-21 21:37:30 -070096
97 wss.bindHandlers({
98 updatePrefs: updatePrefs
99 });
Simon Huntc7ae7952015-04-08 18:59:27 -0700100
101 return {
102 getPrefs: getPrefs,
Simon Huntfcbde892015-04-16 12:05:28 -0700103 asNumbers: asNumbers,
Thomas Vachuska341310c2016-03-24 10:14:13 -0700104 setPrefs: setPrefs,
105 addListener: addListener,
106 removeListener: removeListener
Simon Huntc7ae7952015-04-08 18:59:27 -0700107 };
108 }]);
109
110}());