src/app/services/optimization.service.ts
Properties |
|
Methods |
|
constructor(http: HttpClient, userService: UserService)
|
|||||||||
Defined in src/app/services/optimization.service.ts:24
|
|||||||||
Parameters :
|
Static clearOptimizationInfo |
clearOptimizationInfo()
|
Defined in src/app/services/optimization.service.ts:50
|
Returns :
void
|
createAuthorizationHeader |
createAuthorizationHeader()
|
Defined in src/app/services/optimization.service.ts:108
|
Returns :
HttpHeaders
|
download | ||||
download(id)
|
||||
Defined in src/app/services/optimization.service.ts:159
|
||||
Parameters :
Returns :
Observable<any>
|
downloadAllAlternative | ||||
downloadAllAlternative(hash)
|
||||
Defined in src/app/services/optimization.service.ts:167
|
||||
Parameters :
Returns :
Observable<any>
|
downloadOneAlternative | ||||||
downloadOneAlternative(hash, id)
|
||||||
Defined in src/app/services/optimization.service.ts:163
|
||||||
Parameters :
Returns :
Observable<any>
|
errorHandler | ||||
errorHandler(error)
|
||||
Defined in src/app/services/optimization.service.ts:115
|
||||
Parameters :
Returns :
any
|
getConfig |
getConfig()
|
Defined in src/app/services/optimization.service.ts:119
|
Returns :
Observable<Config>
|
getDto |
getDto()
|
Defined in src/app/services/optimization.service.ts:154
|
Returns :
Observable<OptimizationDto>
|
getFormUrlEncoded | ||||
getFormUrlEncoded(toConvert)
|
||||
Defined in src/app/services/optimization.service.ts:189
|
||||
Parameters :
Returns :
any
|
Static getI18n | ||||
getI18n(key)
|
||||
Defined in src/app/services/optimization.service.ts:42
|
||||
Parameters :
Returns :
any
|
getInteraction | ||||
getInteraction(id)
|
||||
Defined in src/app/services/optimization.service.ts:139
|
||||
Parameters :
Returns :
Observable<any>
|
getInternationalization | ||||
getInternationalization(url)
|
||||
Defined in src/app/services/optimization.service.ts:124
|
||||
Parameters :
Returns :
Observable<any>
|
Static getOptimizationInfo |
getOptimizationInfo()
|
Defined in src/app/services/optimization.service.ts:46
|
Returns :
OptimizationInfo
|
getOptimizationInfos |
getOptimizationInfos()
|
Defined in src/app/services/optimization.service.ts:129
|
Returns :
Observable<any>
|
getOptimizationOptions |
getOptimizationOptions()
|
Defined in src/app/services/optimization.service.ts:149
|
Returns :
Observable<any>
|
Static getPLA |
getPLA()
|
Defined in src/app/services/optimization.service.ts:66
|
Returns :
any
|
Static isRunning |
isRunning()
|
Defined in src/app/services/optimization.service.ts:57
|
Returns :
boolean
|
killOptimizationProcess | ||||||
killOptimizationProcess(id: any)
|
||||||
Defined in src/app/services/optimization.service.ts:134
|
||||||
Parameters :
Returns :
any
|
openAllAlternative | ||||
openAllAlternative(hash)
|
||||
Defined in src/app/services/optimization.service.ts:175
|
||||
Parameters :
Returns :
Observable<any>
|
openOneAlternative | ||||||
openOneAlternative(hash, id)
|
||||||
Defined in src/app/services/optimization.service.ts:171
|
||||||
Parameters :
Returns :
Observable<any>
|
optimize | ||||||
optimize(dto: OptimizationDto)
|
||||||
Defined in src/app/services/optimization.service.ts:179
|
||||||
Parameters :
Returns :
Observable<OptimizationInfo>
|
postInteraction | ||||||
postInteraction(id, solutionSet)
|
||||||
Defined in src/app/services/optimization.service.ts:144
|
||||||
Parameters :
Returns :
Observable<any>
|
Static setPLA | ||||
setPLA(listOfFiles)
|
||||
Defined in src/app/services/optimization.service.ts:61
|
||||
Parameters :
Returns :
void
|
startEventListener | ||||||
startEventListener(optimizationInfo: OptimizationInfo)
|
||||||
Defined in src/app/services/optimization.service.ts:70
|
||||||
Parameters :
Returns :
void
|
uploadPLA | ||||||
uploadPLA(files: FileList)
|
||||||
Defined in src/app/services/optimization.service.ts:199
|
||||||
Parameters :
Returns :
Observable<any>
|
Static i18n |
Type : any
|
Default value : {}
|
Defined in src/app/services/optimization.service.ts:24
|
Static i18nURLs |
Type : object
|
Default value : {
"en-us": "https://raw.githubusercontent.com/otimizes/OPLA-Tool/master/i18n.en-us.json"
}
|
Defined in src/app/services/optimization.service.ts:20
|
Static language |
Type : string
|
Default value : 'en-us'
|
Defined in src/app/services/optimization.service.ts:23
|
Static onOptimizationFinish |
Type : EventEmitter<OptimizationInfo>
|
Default value : new EventEmitter<OptimizationInfo>()
|
Defined in src/app/services/optimization.service.ts:18
|
Static onOptimizationInfo |
Type : EventEmitter<OptimizationInfo>
|
Default value : new EventEmitter<OptimizationInfo>()
|
Defined in src/app/services/optimization.service.ts:15
|
Static onOptimizationStart |
Type : EventEmitter<OptimizationInfo>
|
Default value : new EventEmitter<OptimizationInfo>()
|
Defined in src/app/services/optimization.service.ts:17
|
Static onSelectPLA |
Type : EventEmitter<string[]>
|
Default value : new EventEmitter<string[]>()
|
Defined in src/app/services/optimization.service.ts:16
|
Static optimizationInfo |
Type : OptimizationInfo
|
Defined in src/app/services/optimization.service.ts:14
|
Static source |
Type : EventSource
|
Defined in src/app/services/optimization.service.ts:19
|
import {EventEmitter, Injectable} from '@angular/core';
import {catchError, tap} from "rxjs/operators";
import {Observable} from "rxjs";
import {HttpClient, HttpHeaders} from "@angular/common/http";
import {Config} from "../dto/config";
import {OptimizationDto} from "../dto/optimization-dto";
import {OptimizationInfo} from "../dto/optimization-info";
import {UserService} from "./user.service";
@Injectable({
providedIn: 'root'
})
export class OptimizationService {
public static optimizationInfo: OptimizationInfo;
public static onOptimizationInfo: EventEmitter<OptimizationInfo> = new EventEmitter<OptimizationInfo>();
public static onSelectPLA: EventEmitter<string[]> = new EventEmitter<string[]>();
public static onOptimizationStart: EventEmitter<OptimizationInfo> = new EventEmitter<OptimizationInfo>();
public static onOptimizationFinish: EventEmitter<OptimizationInfo> = new EventEmitter<OptimizationInfo>();
public static source: EventSource;
public static i18nURLs = {
"en-us": "https://raw.githubusercontent.com/otimizes/OPLA-Tool/master/i18n.en-us.json"
};
public static language = 'en-us';
public static i18n: any = {};
constructor(private http: HttpClient, private userService: UserService) {
if (OptimizationService.isRunning()) {
OptimizationService.optimizationInfo = OptimizationService.getOptimizationInfo();
this.startEventListener(OptimizationService.optimizationInfo);
}
if (OptimizationService.getPLA()) {
OptimizationService.onSelectPLA.emit(OptimizationService.getPLA());
}
for (let url of Object.keys(OptimizationService.i18nURLs)) {
this.getInternationalization(OptimizationService.i18nURLs[url])
.subscribe(result => {
OptimizationService.i18n[url] = result;
});
}
}
public static getI18n(key) {
return OptimizationService.i18n[OptimizationService.language][key]
}
public static getOptimizationInfo(): OptimizationInfo {
return JSON.parse(localStorage.getItem("optimizationInfo"));
}
public static clearOptimizationInfo() {
OptimizationService.source.close();
OptimizationService.optimizationInfo = null;
localStorage.removeItem("optimizationInfo");
OptimizationService.onOptimizationInfo.emit(null);
}
public static isRunning() {
return (localStorage.getItem("optimizationInfo") != null && (this.getOptimizationInfo().status === "RUNNING" || this.getOptimizationInfo().status === 'INTERACT'));
}
public static setPLA(listOfFiles) {
this.onSelectPLA.emit(listOfFiles);
localStorage.setItem("pla", JSON.stringify(listOfFiles));
}
public static getPLA() {
return JSON.parse(localStorage.getItem("pla"));
}
startEventListener(optimizationInfo: OptimizationInfo) {
localStorage.setItem("optimizationInfo", JSON.stringify(optimizationInfo));
if (!!window['EventSource'] && optimizationInfo.status != "COMPLETE") {
OptimizationService.source = new EventSource(`${UserService.baseUrl}/optimization/optimization-info/${optimizationInfo.hash}?authorization=${UserService.user.token}`);
OptimizationService.source.addEventListener('message', (e) => {
if (e.data) {
localStorage.setItem("optimizationInfo", e.data);
let json = JSON.parse(e.data);
OptimizationService.optimizationInfo = Object.assign(new OptimizationInfo(), json);
OptimizationService.onOptimizationInfo.emit(OptimizationService.optimizationInfo);
if (json.status === "COMPLETE") {
OptimizationService.onOptimizationFinish.emit(json);
OptimizationService.source.close();
e.stopImmediatePropagation();
e.stopPropagation();
localStorage.removeItem("optimizationInfo");
}
}
}, false);
OptimizationService.source.addEventListener('open', function (e) {
// Connection was opened.
}, false);
OptimizationService.source.addEventListener('error', function (e) {
if (e['readyState'] == EventSource.CLOSED) {
OptimizationService.source.close();
e.stopImmediatePropagation();
e.stopImmediatePropagation();
localStorage.removeItem("optimizationInfo");
// Connection was closed.
}
}, false);
} else {
// Result to xhr polling :(
}
}
createAuthorizationHeader(): HttpHeaders {
return new HttpHeaders({
'Content-Type': 'application/json',
'authorization': UserService.user.token
});
}
errorHandler(error) {
return Promise.reject(error.json());
}
getConfig(): Observable<Config> {
return this.http.get<Config>(`${UserService.baseUrl}/optimization/config`, {headers: this.createAuthorizationHeader()})
.pipe(catchError(this.errorHandler));
}
getInternationalization(url): Observable<any> {
return this.http.get<any>(url)
.pipe(catchError(this.errorHandler));
}
getOptimizationInfos(): Observable<any> {
return this.http.get<any>(`${UserService.baseUrl}/optimization/optimization-infos`, {headers: this.createAuthorizationHeader()})
.pipe(catchError(this.errorHandler));
}
killOptimizationProcess(id: any) {
return this.http.post<any>(`${UserService.baseUrl}/optimization/kill-optimization-process/${id}`, null, {headers: this.createAuthorizationHeader()})
.pipe(catchError(this.errorHandler));
}
getInteraction(id): Observable<any> {
return this.http.get<any>(`${UserService.baseUrl}/optimization/interaction/${id}`, {headers: this.createAuthorizationHeader()})
.pipe(catchError(this.errorHandler));
}
postInteraction(id, solutionSet): Observable<any> {
return this.http.post<any>(`${UserService.baseUrl}/optimization/interaction/${id}`, solutionSet, {headers: this.createAuthorizationHeader()})
.pipe(catchError(this.errorHandler));
}
getOptimizationOptions(): Observable<any> {
return this.http.get<any>(`${UserService.baseUrl}/optimization/optimization-options`, {headers: this.createAuthorizationHeader()})
.pipe(catchError(this.errorHandler));
}
getDto(): Observable<OptimizationDto> {
return this.http.get<OptimizationDto>(`${UserService.baseUrl}/optimization/dto`, {headers: this.createAuthorizationHeader()})
.pipe(catchError(this.errorHandler));
}
download(id): Observable<any> {
return this.http.get(`${UserService.baseUrl}/optimization/download/${id}?authorization=${UserService.user.token}`, {responseType: 'arraybuffer'});
}
downloadOneAlternative(hash, id): Observable<any> {
return this.http.get(`${UserService.baseUrl}/optimization/download-alternative/${hash}/${id}?authorization=${UserService.user.token}`, {responseType: 'arraybuffer'});
}
downloadAllAlternative(hash): Observable<any> {
return this.http.get(`${UserService.baseUrl}/optimization/download-all-alternative/${hash}?authorization=${UserService.user.token}`, {responseType: 'arraybuffer'});
}
openOneAlternative(hash, id): Observable<any> {
return this.http.get(`${UserService.baseUrl}/optimization/open-alternative/${hash}/${id}?authorization=${UserService.user.token}`);
}
openAllAlternative(hash): Observable<any> {
return this.http.get(`${UserService.baseUrl}/optimization/open-all-alternative/${hash}?authorization=${UserService.user.token}`);
}
optimize(dto: OptimizationDto): Observable<OptimizationInfo> {
return this.http.post<OptimizationInfo>(`${UserService.baseUrl}/optimization/optimize`, dto, {headers: this.createAuthorizationHeader()})
.pipe(catchError(this.errorHandler), tap(data => {
this.startEventListener(data);
setTimeout(() => {
OptimizationService.onOptimizationStart.emit(data);
}, 2000)
}));
}
getFormUrlEncoded(toConvert) {
const formBody = [];
for (const property in toConvert) {
const encodedKey = encodeURIComponent(property);
const encodedValue = encodeURIComponent(toConvert[property]);
formBody.push(encodedKey + '=' + encodedValue);
}
return formBody.join('&');
}
uploadPLA(files: FileList): Observable<any> {
let formData = new FormData();
if (files.length === 1) {
formData.append('file', files.item(0));
} else {
for (let filesKey in files) {
if (files[filesKey] instanceof Blob) {
formData.append("file", files[filesKey], files[filesKey]['webkitRelativePath']);
}
}
}
return this.http.post(`${UserService.baseUrl}/optimization/upload-pla`, formData, {
headers: new HttpHeaders({'enctype': 'multipart/form-data', "authorization": UserService.user.token})
});
}
}