/*-------------------------------------------------------------------------------------------------------------- * Copyright (c) insite-gmbh. All rights reserved. * Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------------------------*/ import { Inject, Injectable } from '@angular/core'; import { IInaxConfigService, IInaxConfig } from './interfaces/IInaxConfigService.interface'; import { BehaviorSubject } from 'rxjs/BehaviorSubject'; import { IHUBSERVICE_TOKEN, IHubService } from './signalR/signalRServices'; @Injectable() export class InaxConfiguration implements IInaxConfigService, IInaxConfig { public Url: string = "http://192.168.0.148:8099/" // "http://localhost:8090/"; public Username: string = ""; public Password: string = ""; public DefaultLanguage: string = "DE-de"; public SignalRHubs: Array = ["PlcHub", "ScriptHub", "AlarmHub"]; public EnabledSignalRHubs: Array; public UseSignalR = true; private _apiUrl: string = "api/"; private _signalRUrl: string = "signalr"; public get ServerWithApiUrl(): string { return this.Url + this._apiUrl; } public get ServerWithSignalRUrl(): string { return this.Url + this._signalRUrl; } private _configurationSubject: BehaviorSubject; /* would be nice, but leads to cyclic dependencies, since each HubService wants an injection of this config. kgo, 22.12.16 constructor(@Inject(IHUBSERVICE_TOKEN) private _hubServices: IHubService[]) { this._hubServices.forEach(service => { if (service) { this.SignalRHubs.push(service.hubName); } }) this.loadConfiguration(); } */ constructor() { this.loadConfiguration(); } private loadConfiguration(): void { let conf = localStorage.getItem('inax_configuration'); if (conf) { Object.assign(this, JSON.parse(conf)); } else { this.EnabledSignalRHubs = this.SignalRHubs.slice(); } this._configurationSubject = new BehaviorSubject(this); } private saveConfiguration(plainConfig: IInaxConfig): void { localStorage.setItem('inax_configuration', JSON.stringify(plainConfig)); } setConfiguration(configuration: IInaxConfig): void { Object.assign(this, configuration); this.saveConfiguration(configuration); this._configurationSubject.next(this); } getConfiguration(): BehaviorSubject { return this._configurationSubject; } public buildRestUrl(controller:string, methodName:string=""):string{ return InaxConfiguration.accessUrl(this.ServerWithApiUrl,controller, methodName); } public buildSignalRUrl(hubname:string):string{ return InaxConfiguration.accessUrl(this._signalRUrl,hubname); } public static accessUrl(server: string, controller:string, methodName:string=""):string { let normalizedCommand = InaxConfiguration.normalize(methodName); let result = `${InaxConfiguration.normalize(server)}/${InaxConfiguration.normalize(controller)}`; if(normalizedCommand != null && normalizedCommand.length > 0) result += `/${normalizedCommand}`; return result; } private static normalize(pathPart: string):string{ let offset:number = 0; let length:number = pathPart.length; if(pathPart.startsWith('/')){ offset++; length--; } if(pathPart.endsWith('/')) length--; return pathPart.substring(offset,offset+length); } }