An error occurred while loading the file. Please try again.
-
Le Roux Erwan authored2872efd9
import { Component, Input } from "@angular/core";
import { CalculatorResults } from "../../results/calculator-results";
import { PrebarrageResults } from "../../results/prebarrage-results";
import { I18nService } from "../../services/internationalisation.service";
import { cLog, Message, MessageCode, MessageSeverity, PreBarrage, Result } from "jalhyd";
@Component({
selector: "pb-results",
templateUrl: "./pb-results.component.html",
styleUrls: [
"./pb-results.component.scss"
]
})
export class PbResultsComponent {
/** résultats des bassins, non mis en forme */
private _pbResults: PrebarrageResults;
constructor(
private i18nService: I18nService,
) { }
@Input()
public set results(rs: CalculatorResults[]) {
this._pbResults = undefined;
for (const r of rs) {
if (r instanceof PrebarrageResults) {
this._pbResults = r as PrebarrageResults;
}
}
}
public get pbResults() {
return this._pbResults;
}
// true if any result is present
public get hasResults(): boolean {
return this._pbResults && this._pbResults.hasResults;
}
// true if basin results are present
public get hasBasinResults(): boolean {
return this._pbResults && this._pbResults.hasBasinResults;
}
// true if basin results at current iteration have data
public get basinResultsHaveData(): boolean {
return this._pbResults && this._pbResults.basinResultsHaveData;
}
// true if wall results are present
public get hasWallResults(): boolean {
return this._pbResults && this._pbResults.hasWallResults;
}
private mergeGlobalLog(result: Result, log: cLog) {
if (result) {
if (result.hasGlobalLog()) {
log.addLog(result.globalLog);
}
// if no parameter is varying, 1st element log is considered "global"
if (this.pbResults.variatedParameters.length === 0) {
if (result.hasResultElements() && result.resultElement.hasLog()) {
log.addLog(result.log);
}
}
}
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
}
/**
* Returns the number of errors, warnings, infos among children logs
*/
private logStats(): any {
const ret = {
info: 0,
warning: 0,
error: 0
};
if (this._pbResults.result?.hasLog()) {
for (const re of this._pbResults.result.resultElements) {
if (re.hasLog()) {
for (const m of re.log.messages) {
const s = m.getSeverity();
switch (s) {
case MessageSeverity.INFO:
ret.info ++;
break;
case MessageSeverity.WARNING:
ret.warning ++;
break;
case MessageSeverity.ERROR:
ret.error ++;
break;
}
}
}
}
}
const pb = this._pbResults.result.sourceNub as PreBarrage;
for (const pbc of pb.children) { // bassins et cloisons
if (pbc.result !== undefined) {
for (const re of pbc.result.resultElements) {
if (re.hasLog()) {
for (const m of re.log.messages) {
const s = m.getSeverity();
switch (s) {
case MessageSeverity.INFO:
ret.info ++;
break;
case MessageSeverity.WARNING:
ret.warning ++;
break;
case MessageSeverity.ERROR:
ret.error ++;
break;
}
}
}
}
}
}
return ret;
}
/*
* Retourne les logs à afficher dans le composant de log global, au dessus
* du sélecteur d'itération : messages globaux et / ou résumé des messages
* spécifiques à chaque ResultElement
*/
public get globalLog(): cLog {
const l = new cLog();
/* console.log(
`>> Global Log >> this._pbResults: ${this._pbResults !== undefined}`
+ `, vpl: ${this?._pbResults?.variatedParameters?.length}`
+ `, hasLog: ${this?._pbResults?.hasLog}`
); */
if (this._pbResults && this.pbResults.variatedParameters.length > 0) {
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
this.mergeGlobalLog(this._pbResults.result, l);
// console.log(">>>> after merge, messages length=", l.messages.length);
// un problème avec le PB en général / les cloisons / les bassins, à une étape quelconque ?
if (
(this.pbResults.hasLog)
&& l.messages.length === 0 // existing global messages make generic message below useless
) {
const logStats = this.logStats();
const m = new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED);
m.extraVar.info = "" + logStats.info; // to avoid displaying fixed number of digits
m.extraVar.warning = "" + logStats.warning;
m.extraVar.error = "" + logStats.error;
l.add(m);
}
} // sinon pas de log global (aucun paramètre ne varie)
return l;
}
/**
* Retourne les logs à afficher dans le composant de log local, en dessous
* du sélecteur d'itération : messages concernant l'itération (le ResultElement)
* en cours
*/
public get iterationLog(): cLog {
const l = new cLog();
if (this._pbResults?.result) {
const pb = this._pbResults.result.sourceNub as PreBarrage;
if (this._pbResults.variatedParameters.length > 0) {
// A. si un paramètre varie
const vi = this._pbResults.variableIndex;
// log du PB pour l'itération en cours
if (
this._pbResults.result
&& this._pbResults.result.hasResultElements()
&& this._pbResults.result.resultElements[vi]
&& this._pbResults.result.resultElements[vi]?.hasLog()
) {
l.addLog(this._pbResults.result.resultElements[vi].log);
}
// logs des enfants pour l'itération en cours
for (const pbc of pb.children) {
if (pbc?.result?.hasResultElements() && pbc.result.resultElements[vi]?.hasLog()) {
l.addLog(pbc.result.resultElements[vi].log);
}
}
} else {
// B. si aucun paramètre ne varie
this.mergeGlobalLog(this._pbResults.result, l); // faut bien mettre le log global quelque part
// logs des enfants
for (const pbc of pb.children) {
if (pbc?.result?.hasResultElements() && pbc.result.resultElement?.hasLog()) {
l.addLog(pbc.result.resultElement.log);
}
}
}
}
return l;
}
public get uitextGeneralLogTitle(): string {
return this.i18nService.localizeText("INFO_TITREJOURNAL_GLOBAL");
}
}