GNM-838 Möglichkeit zum Direktzugriff auf gridMeasure Komponente herstellen
diff --git a/src/app/common/globals.ts b/src/app/common/globals.ts
index ee238c8..29c76f6 100644
--- a/src/app/common/globals.ts
+++ b/src/app/common/globals.ts
@@ -19,6 +19,8 @@
     static STATUSES = 'STATUSES';
     static GRID_TERRITORIES = 'TERRITORIES';
     static ACCESS_TOKEN = 'ACCESS_TOKEN';
+    static FORWARD_URL = 'FORWARD_URL';
+    static URL_PARAMS = 'URL_PARAMS';
     static BRANCHES = class Branches {
         static const power = 'S';
         static const gas = 'G';
diff --git a/src/app/pages/login/login.component.spec.ts b/src/app/pages/login/login.component.spec.ts
index 673d4ef..d3d9f7d 100644
--- a/src/app/pages/login/login.component.spec.ts
+++ b/src/app/pages/login/login.component.spec.ts
@@ -11,7 +11,7 @@
 */
 /* tslint:disable:no-unused-variable */
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-import { Router } from '@angular/router';
+import { Router, ActivatedRoute } from '@angular/router';
 import { By } from '@angular/platform-browser';
 import { DebugElement } from '@angular/core';
 import { AbstractMockObservableService } from '../../common/abstract-mock-observable.service';
@@ -31,6 +31,7 @@
 import { SessionContext } from '../../common/session-context';
 import { JwtHelper } from 'angular2-jwt';
 import { JWT_TOKEN_HUGO } from '../../testing/jwt-token';
+import { ActivatedRouteStub } from '../../testing';
 
 class FakeRouter {
   navigate(commands: any[]) {
@@ -43,6 +44,7 @@
   let component: LoginComponent;
   let fixture: ComponentFixture<LoginComponent>;
   let spy: jasmine.Spy;
+  let activatedStub: ActivatedRouteStub;
 
   const correctUser: User = {
     id: 44, username: 'carlo', password: 'serverPwd'
@@ -91,16 +93,18 @@
     mockDataService = new MockDataService();
     sessionContext = new SessionContext();
     router = new FakeRouter() as any as Router;
+    activatedStub = new ActivatedRouteStub();
 
     TestBed.configureTestingModule({
       declarations: [LoginComponent,
         MockComponent({ selector: 'app-version-info' })
       ],
       providers: [
-      { provide: AuthenticationService, useValue: mockAuthService },
-      { provide: Router, useValue: router },
-      { provide: SessionContext, useValue: sessionContext },
-      { provide: BaseDataService, useValue: mockDataService }]
+        { provide: AuthenticationService, useValue: mockAuthService },
+        { provide: Router, useValue: router },
+        { provide: ActivatedRoute, useValue: activatedStub },
+        { provide: SessionContext, useValue: sessionContext },
+        { provide: BaseDataService, useValue: mockDataService }]
     })
       .compileComponents();
   }));
diff --git a/src/app/pages/login/login.component.ts b/src/app/pages/login/login.component.ts
index 997b5dc..5b8a076 100644
--- a/src/app/pages/login/login.component.ts
+++ b/src/app/pages/login/login.component.ts
@@ -10,7 +10,7 @@
 ******************************************************************************
 */
 import { Component, OnInit, ViewChildren, AfterViewInit } from '@angular/core';
-import { Router } from '@angular/router';
+import { Router, ActivatedRoute, Params, ParamMap } from '@angular/router';
 import { AuthenticationService } from '../../services/authentication.service';
 import { BaseDataService } from '../../services/base-data.service';
 import { SessionContext } from '../../common/session-context';
@@ -27,14 +27,18 @@
 export class LoginComponent implements OnInit, AfterViewInit {
   @ViewChildren('username') usernameInput;
 
+  private urlParamsMap: ParamMap;
+
   constructor(
     private router: Router,
     private authService: AuthenticationService,
     private baseDataService: BaseDataService,
-    public sessionContext: SessionContext
+    public sessionContext: SessionContext,
+    private activatedRoute: ActivatedRoute
   ) { }
 
   ngOnInit() {
+    this.urlParamsMap = this.activatedRoute.snapshot.queryParamMap;
     localStorage.removeItem('authenticatedUserId');
   }
 
@@ -44,10 +48,32 @@
 
 
   private pastLogin() {
+    this.processDirectLinkToGridMeasureDetail();
     this.initBaseData();
     this.goToOverview();
   }
 
+  private processDirectLinkToGridMeasureDetail() {
+    if (!this.urlParamsMap) {
+      return;
+    }
+    const fwdUrl = this.urlParamsMap.get('fwdUrl');
+    const fwdId = this.urlParamsMap.get('fwdId');
+    if (!fwdUrl) {
+      return;
+    }
+
+    const linkToOpen = fwdUrl + '?accessToken=' + this.sessionContext.getAccessToken() + '&fwdId=' + fwdId;
+    this.urlParamsMap = undefined;
+
+    this.authService.checkAuth().subscribe(res => {
+      window.open(linkToOpen, '_blank');
+    },
+      error => {
+        console.log(error);
+      });
+  }
+
   private initBaseData() {
   }
 
@@ -66,10 +92,10 @@
     creds.password = pw;
     this.authService.login(creds)
       .subscribe(jwtToken => this.onLoggedInSuccessfully(jwtToken),
-      error => {
-        console.log(error);
-        this.setError(true);
-      });
+        error => {
+          console.log(error);
+          this.setError(true);
+        });
   }
 
   private onLoggedInSuccessfully(jwtToken: any) {