Bugzilla 530162-Filtermatrix/responsibility filter: Show all Person with full name (forename and lastname)
diff --git a/src/app/common/globals.ts b/src/app/common/globals.ts
index c56d3a7..d4f75b9 100644
--- a/src/app/common/globals.ts
+++ b/src/app/common/globals.ts
@@ -2,6 +2,7 @@
     static FRONTEND_VERSION = '1.0.1';
     static SESSION_TOKEN_TAG = 'X-XSRF-TOKEN';
     static CURRENT_USER = 'CURRENT_USER';
+    static ALL_USERS = 'ALL_USERS';
     static BASE_URL = '/elogbook/rest/beservice';
     static BRANCHESNAME = 'BRANCHES';
     static STATUSES = 'STATUSES';
diff --git a/src/app/common/session-context.spec.ts b/src/app/common/session-context.spec.ts
index e33f239..5151bfd 100644
--- a/src/app/common/session-context.spec.ts
+++ b/src/app/common/session-context.spec.ts
@@ -3,6 +3,8 @@
 import { TestBed, async, inject } from '@angular/core/testing';
 import { SessionContext } from './session-context';
 import { User } from '../model/user';
+import { USERS } from '../test-data/users';
+import { UserMap } from 'app/common/user-map';
 
 describe('SessionContext', () => {
   beforeEach(() => {
@@ -27,4 +29,30 @@
     expect(service.getCurrUser().id).toBe('44');
     expect(service.getCurrUser().name).toBe('Rudi');
   }));
+
+  it('create a usermapper should fails when empty', inject([SessionContext], (service: SessionContext) => {
+    let errorOccured = false;
+    try {
+      const um = service.getUserMap();
+    } catch ( ea ) {
+      errorOccured = true;
+    }
+
+    expect( errorOccured ).toBe( true );
+  }));
+
+  it('create a usermapper should work with all users set', inject([SessionContext], (service: SessionContext) => {
+    let errorOccured = false;
+    let um: UserMap;
+    service.setAllUsers(USERS);
+    try {
+      um = service.getUserMap();
+    } catch ( ea ) {
+      errorOccured = true;
+    }
+
+    expect( errorOccured ).toBe( false );
+    expect( um.findUser('otto').username ).toBe('otto');
+  }));
+
 });
diff --git a/src/app/common/session-context.ts b/src/app/common/session-context.ts
index d42e2ab..ddc8a75 100644
--- a/src/app/common/session-context.ts
+++ b/src/app/common/session-context.ts
@@ -14,6 +14,7 @@
 import { NotificationHistoryExpansionState } from '../model/notificationhistoryexpansionstate';
 import { SortingState } from '../model/sorting-state';
 import { JwtPayload } from '../model/jwt-payload';
+import { UserMap } from '../common/user-map';
 
 @Injectable()
 export class SessionContext {   
@@ -29,6 +30,7 @@
     public filterExpanded = false;
     private notificationHistoryExpansionStates: NotificationHistoryExpansionState[];
     public sortingState: SortingState; 
+    public userMap: UserMap = null;
  
 
     bannerMessage: BannerMessage = new BannerMessage();
@@ -62,6 +64,15 @@
         localStorage.setItem(Globals.CURRENT_USER, JSON.stringify(usr));
     }
 
+    getAllUsers(): User[] {
+        const allUsers = localStorage.getItem(Globals.ALL_USERS);
+        return JSON.parse(allUsers);
+    }
+
+    setAllUsers(allUsr: User[]) {
+        localStorage.setItem(Globals.ALL_USERS, JSON.stringify(allUsr));
+    }
+
     setSortingState(gridId: string, sortState: SortingState): void {
         localStorage.setItem(gridId, JSON.stringify(sortState));
     }
@@ -318,4 +329,11 @@
         this.globalSearchFilter.fastSearchSelected = true;
         localStorage.setItem(Globals.SEARCHOBJECT, JSON.stringify(this.globalSearchFilter));
     }
+
+    getUserMap(): UserMap {
+        if ( this.userMap == null ) {
+            this.userMap = new UserMap(this.getAllUsers());
+        }
+        return this.userMap;
+    }
 }
diff --git a/src/app/common/user-map.ts b/src/app/common/user-map.ts
new file mode 100644
index 0000000..051a6b7
--- /dev/null
+++ b/src/app/common/user-map.ts
@@ -0,0 +1,22 @@
+import {User} from '../model/user';
+
+export class UserMap {
+    private mappedUsers: User[];
+
+    constructor( allUsers: User[] ) {
+        this.mappedUsers = [];
+        if ( !allUsers ) {
+            throw new EvalError('UserMap was created without any Users!');
+        }
+        for ( const usr of allUsers ) {
+            this.mappedUsers[ usr.username ] = usr;
+        }
+    }
+
+    public findUser( usrShort: string ): User {
+        if ( this.mappedUsers == null ) {
+            throw new EvalError( 'Usermap has not been initialized before first access');
+        }
+        return this.mappedUsers[ usrShort ];
+    }
+}
diff --git a/src/app/filter/filter.component.css b/src/app/filter/filter.component.css
index 54a007f..cf17e44 100644
--- a/src/app/filter/filter.component.css
+++ b/src/app/filter/filter.component.css
@@ -1,5 +1,5 @@
 .filterCheckbox {
      float: left; 
     padding-left: 1cm;
-}
+ }
     
\ No newline at end of file
diff --git a/src/app/filter/filter.component.html b/src/app/filter/filter.component.html
index de44834..2e78f2b 100644
--- a/src/app/filter/filter.component.html
+++ b/src/app/filter/filter.component.html
@@ -32,22 +32,22 @@
             <td>
               <span class="filterCheckbox"><input type="checkbox" *ngIf="responsibilityRow && getResponsiblity(responsibilityRow,'S')" (change)="responsibilitiesSelectionChanged()"
                 class="responsibility-checkbox-er" [(ngModel)]="getResponsiblity(responsibilityRow,'S').isActive"></span>
-               <span class="filterUsername" *ngIf="responsibilityRow && getResponsiblity(responsibilityRow,'S')">{{ getResponsiblity(responsibilityRow, 'S').responsibleUser }}</span> 
+               <span class="filterUsername" *ngIf="responsibilityRow && getResponsiblity(responsibilityRow,'S')">{{ mapUserName(getResponsiblity(responsibilityRow, 'S').responsibleUser) }}</span> 
             </td>
             <td>
               <span class="filterCheckbox"><input type="checkbox" *ngIf="responsibilityRow  && getResponsiblity(responsibilityRow,'G')" (change)="responsibilitiesSelectionChanged()"
                   class="responsibility-checkbox-gr" [(ngModel)]="getResponsiblity(responsibilityRow,'G').isActive"></span>
-               <span class="filterUsername" *ngIf="responsibilityRow && getResponsiblity(responsibilityRow,'G')">{{ getResponsiblity(responsibilityRow, 'G').responsibleUser }}</span> 
+               <span class="filterUsername" *ngIf="responsibilityRow && getResponsiblity(responsibilityRow,'G')">{{ mapUserName(getResponsiblity(responsibilityRow, 'G').responsibleUser) }}</span> 
             </td>
             <td>
               <span class="filterCheckbox"><input type="checkbox" *ngIf="responsibilityRow  && getResponsiblity(responsibilityRow,'F')" (change)="responsibilitiesSelectionChanged()"
                 class="responsibility-checkbox-dhr" [(ngModel)]="getResponsiblity(responsibilityRow,'F').isActive"></span>
-               <span class="filterUsername" *ngIf="responsibilityRow && getResponsiblity(responsibilityRow,'F')">{{ getResponsiblity(responsibilityRow, 'F').responsibleUser }}</span> 
+               <span class="filterUsername" *ngIf="responsibilityRow && getResponsiblity(responsibilityRow,'F')">{{ mapUserName(getResponsiblity(responsibilityRow, 'F').responsibleUser) }}</span> 
             </td>
             <td>
               <span class="filterCheckbox"><input type="checkbox" *ngIf="responsibilityRow  && getResponsiblity(responsibilityRow,'W')" (change)="responsibilitiesSelectionChanged()"
                 class="responsibility-checkbox-wr" [(ngModel)]="getResponsiblity(responsibilityRow,'W').isActive"></span>
-               <span class="filterUsername" *ngIf="responsibilityRow && getResponsiblity(responsibilityRow,'W')">{{ getResponsiblity(responsibilityRow, 'W').responsibleUser }}</span> 
+               <span class="filterUsername" *ngIf="responsibilityRow && getResponsiblity(responsibilityRow,'W')">{{ mapUserName(getResponsiblity(responsibilityRow, 'W').responsibleUser) }}</span> 
             </td>
           </tr>
         </tbody>
diff --git a/src/app/filter/filter.component.ts b/src/app/filter/filter.component.ts
index cc4a49e..83b5a7d 100644
--- a/src/app/filter/filter.component.ts
+++ b/src/app/filter/filter.component.ts
@@ -146,4 +146,14 @@
     this.sessionContext.setfilterMatrix(filterMatrix);
     this.messageService.matrixFilterChanged$.emit(filterMatrix.getNumFilterList());
   }
+
+  mapUserName( shortUsr: string ) {
+    const usr = this.sessionContext.getUserMap().findUser(shortUsr);
+    if ( !usr ) {
+      return '[' + shortUsr + ']';
+    } else {
+      return usr.name;
+    }
+  }
+
 }
diff --git a/src/app/services/base-data.service.ts b/src/app/services/base-data.service.ts
index 4d0a6e8..4af899d 100644
--- a/src/app/services/base-data.service.ts
+++ b/src/app/services/base-data.service.ts
@@ -11,7 +11,6 @@
 import { Branch } from '../model/branch';
 import { Status } from '../model/status';
 import { GridTerritory } from '../model/gridterritory';
-// import { NotificationHistoryExpansionState } from '../model/notificationhistoryexpansionstate';
 import { GRIDTERRITORIES } from '../test-data/gridterritories';
 import { MessageService } from './message.service';
 
@@ -54,15 +53,6 @@
       .map(res => super.extractData(res, this._sessionContext))
       .catch((error) => { return super.handleErrorPromise(error); });
   }
-  /* 
-  public getNotificationHistoryExpansionStates(): Observable<NotificationHistoryExpansionState[]> {
-    const headers = new Headers();
-    const url = super.getBaseUrl() + '/notificationHistoryExpansionStates/';
-    this.createCommonHeaders(headers, this._sessionContext);
-    return this._http.get(url, { headers: headers })
-      .map(res => super.extractData(res, this._sessionContext))
-       .catch((error) => { return super.handleErrorPromise(error); });
-  }
-  */
+
 }
 
diff --git a/src/app/services/jobs/base-data-loader.service.spec.ts b/src/app/services/jobs/base-data-loader.service.spec.ts
index 4f70c4f..0216df6 100644
--- a/src/app/services/jobs/base-data-loader.service.spec.ts
+++ b/src/app/services/jobs/base-data-loader.service.spec.ts
@@ -2,11 +2,12 @@
 import { Status } from '../../model/status';
 import { Branch } from '../../model/branch';
 import { GridTerritory } from '../../model/gridterritory';
+import { User } from '../../model/user';
 import { MessageService, MessageDefines } from '../../services/message.service';
 import { AbstractMockObservableService } from '../../common/abstract-mock-observable.service';
 import { SessionContext } from '../../common/session-context';
 import { BaseDataService } from '../base-data.service';
-
+import { USERS} from '../../test-data/users';
 import { BaseDataLoaderService } from './base-data-loader.service';
 
 describe('BaseDataLoaderService', () => {
@@ -38,18 +39,31 @@
     }
   }
 
+  class MockUserService extends AbstractMockObservableService {
+    public userList: User[];
+    public userError;
+
+    getUsers() {
+      const newService = new MockDataService();
+      newService.content = this.userList;
+      newService.error = this.userError;
+      return newService;
+    }
+  }
   let sessionContext: SessionContext;
   let messageService: MessageService;
   let mockDataService;  
+  let mockUserService;
 
 
   beforeEach(async(() => {
     mockDataService = new MockDataService(); 
+    mockUserService = new MockUserService();
     sessionContext = new SessionContext();
     sessionContext.clearStorage();
     messageService = new MessageService();
 
-    const loaderServer = new BaseDataLoaderService( mockDataService, messageService, sessionContext );
+    const loaderServer = new BaseDataLoaderService( mockDataService, mockUserService, messageService, sessionContext );
 
   }));
 
@@ -57,10 +71,12 @@
     mockDataService.statusList = [{ id: 1, name: 'offen' }];
     mockDataService.branchList = [{ id: 1, name: 'W', description: 'Wasser' }];
     mockDataService.gridTerritoryList = [{ id: 1, name: 'MA', description: 'Mannheim', fkRefMaster: 1 }];
+    mockUserService.userList = USERS;
 
     expect(sessionContext.getStatuses()).toBeNull();
     expect(sessionContext.getBranches()).toBeNull();
     expect(sessionContext.getGridTerritories()).toBeNull();
+    expect(sessionContext.getAllUsers()).toBeNull();
 
     messageService.loginLogoff$.emit( MessageDefines.MSG_LOG_IN_SUCCEEDED );
 
@@ -74,5 +90,7 @@
 
     expect(sessionContext.getGridTerritories().length).toBe(1);
     expect(sessionContext.getGridTerritories()[0].name).toBe('MA');
+
+    expect(sessionContext.getAllUsers().length).toBe(3);
   }));
 });
diff --git a/src/app/services/jobs/base-data-loader.service.ts b/src/app/services/jobs/base-data-loader.service.ts
index 94291e7..c45cfea 100644
--- a/src/app/services/jobs/base-data-loader.service.ts
+++ b/src/app/services/jobs/base-data-loader.service.ts
@@ -1,6 +1,7 @@
 import { Injectable, EventEmitter } from '@angular/core';
 import { MessageService, MessageDefines } from '../message.service';
 import { BaseDataService } from '../base-data.service';
+import { UserService } from '../user.service';
 import { SessionContext } from '../../common/session-context';
 
 
@@ -9,6 +10,7 @@
 
   constructor(
     private baseDataService: BaseDataService,
+    private userService: UserService,
     private msgService: MessageService,
     private sessionContext: SessionContext
   ) {
@@ -40,6 +42,13 @@
       error => {
         console.log(error);
       });
+
+
+    this.userService.getUsers()
+      .subscribe(res => this.sessionContext.setAllUsers(res),
+      error => {
+        console.log(error);
+      });
   }
 
 }