diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index 9382812aaf709a4ed128baafda4954ff7bf8c2b8..a3c0e5101752629fcbda78afff653907632e9a6b 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -47,6 +47,10 @@ ServerConnector.init = function() { self._configurationParam = []; self._projects = []; self._projectsById = []; + + self._users = []; + self._usersByLogin = []; + self._customMap = null; self._sessionData = undefined; self._configuration = undefined; @@ -535,10 +539,16 @@ ServerConnector.getProjectSourceUrl = function(queryParams, filterParams) { }); }; -ServerConnector.getUserUrl = function(queryParams, filterParams) { +ServerConnector.getUsersUrl = function(queryParams, filterParams) { return this.getApiUrl({ type : "users/", - method : queryParams.login, + params : filterParams + }); +}; + +ServerConnector.getUserUrl = function(queryParams, filterParams) { + return this.getApiUrl({ + url : this.getUsersUrl() + queryParams.login, params : filterParams, }); }; @@ -729,10 +739,42 @@ ServerConnector.getUser = function(login) { return self.sendGetRequest(self.getUserUrl(queryParams, filterParams)).then(function(content) { var obj = JSON.parse(content); - return new User(obj); + var user = new User(obj); + if (self._usersByLogin[user.getLogin()] !== undefined) { + self._usersByLogin[user.getLogin()].update(user); + } else { + self._usersByLogin[user.getLogin()] = user; + } + return self._usersByLogin[user.getLogin()]; }); }; +ServerConnector.getUsers = function(forceRefresh) { + var self = this; + var queryParams = {}; + var filterParams = {}; + + if (self._users.length > 0 && !forceRefresh) { + return Promise.resolve(self._users); + } else { + return self.sendGetRequest(self.getUsersUrl()).then(function(content) { + var parsedData = JSON.parse(content); + self._users.length = 0; + for (var i = 0; i < parsedData.length; i++) { + var user = new User(parsedData[i]); + if (self._usersByLogin[user.getLogin()] !== undefined) { + self._usersByLogin[user.getLogin()].update(user); + } else { + self._usersByLogin[user.getLogin()] = user; + } + self._users.push(self._usersByLogin[user.getLogin()]); + } + return self._users; + }); + } + +}; + ServerConnector.getOverlays = function(params) { var self = this; if (params === undefined) { diff --git a/frontend-js/src/main/js/map/data/User.js b/frontend-js/src/main/js/map/data/User.js index cd41f7d7f9760ec82f889fe2618259a19fc1c792..4aa7c3bce7c5063eb5dbf4d2ed37f8a9871970e3 100644 --- a/frontend-js/src/main/js/map/data/User.js +++ b/frontend-js/src/main/js/map/data/User.js @@ -25,7 +25,7 @@ User.prototype.getLogin = function() { }; User.prototype.setName = function(name) { - this._name = name ; + this._name = name; }; User.prototype.getName = function() { @@ -88,4 +88,16 @@ User.prototype.getPrivileges = function() { return this._privileges; }; +User.prototype.update = function(user) { + this.setLogin(user.getLogin()); + this.setName(user.getName()); + this.setSurname(user.getSurname()); + this.setEmail(user.getEmail()); + this.setRemoved(user.getRemoved()); + this.setPrivileges(user.getPrivileges()); + this.setMinColor(user.getMinColor()); + this.setMaxColor(user.getMaxColor()); + this.setSimpleColor(user.getSimpleColor()); +}; + module.exports = User; diff --git a/frontend-js/src/test/js/ServerConnector-test.js b/frontend-js/src/test/js/ServerConnector-test.js index fcb9702766a7c33104d0d832b0da6b13c0d39dab..69ddaba24b8135820913b08c969c249501054cd0 100644 --- a/frontend-js/src/test/js/ServerConnector-test.js +++ b/frontend-js/src/test/js/ServerConnector-test.js @@ -8,7 +8,7 @@ var HttpStatus = require('http-status-codes'); var Alias = require('../../main/js/map/data/Alias'); var Configuration = require('../../main/js/Configuration'); -var LayoutData= require('../../main/js/map/data/LayoutData'); +var LayoutData = require('../../main/js/map/data/LayoutData'); var LayoutAlias = require('../../main/js/map/data/LayoutAlias'); var MapModel = require('../../main/js/map/data/MapModel'); var NetworkError = require('../../main/js/NetworkError'); @@ -299,4 +299,26 @@ describe('ServerConnector', function() { }); }); + describe('getUsers', function() { + it('default', function() { + return ServerConnector.getUsers().then(function(users) { + assert.ok(users.length > 0); + }); + }); + it('refresh', function() { + var user; + var users; + var modifiedName = "xxx name"; + return ServerConnector.getUsers().then(function(result) { + users = result; + user = users[0]; + user.setName(modifiedName); + return ServerConnector.getUsers(true); + }).then(function(result) { + assert.ok(users === result); + assert.ok(user.getName() !== modifiedName); + }); + }); + }); + });