diff --git a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts index 232f0c436caa9e177defbe862dbdb940a4f7fd39..a17be949b0d7e2e7643f71eb7523b9c0612092fb 100644 --- a/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts +++ b/src/app/components/macrorugo-compound-results/macrorugo-compound-results.component.ts @@ -10,6 +10,7 @@ import { ApplicationSetupService } from "../../services/app-setup.service"; import { I18nService } from "../../services/internationalisation.service"; import { MacrorugoCompoundResults } from "../../results/macrorugo-compound-results"; import { ResultsComponentDirective } from "../fixedvar-results/results.component"; +import { LogHelper } from "app/results/log-helper"; @Component({ selector: "macrorugo-compound-results", @@ -23,6 +24,8 @@ export class MacrorugoCompoundResultsComponent extends ResultsComponentDirective /** résultats non mis en forme */ private _mrcResults: MacrorugoCompoundResults; + private _logHelper: LogHelper; + constructor( private appSetupService: ApplicationSetupService, private i18nService: I18nService, @@ -33,143 +36,19 @@ export class MacrorugoCompoundResultsComponent extends ResultsComponentDirective @Input() public set results(rs: CalculatorResults[]) { this._mrcResults = undefined; + this._logHelper = undefined; if (rs.length > 0 && rs[0] instanceof MacrorugoCompoundResults) { this._mrcResults = rs[0] as MacrorugoCompoundResults; + this._logHelper = new LogHelper(this._mrcResults, this._mrcResults.childrenResults); } } - 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.mrcResults.variatedParameters.length === 0) { - if (result.hasResultElements() && result.resultElement.hasLog()) { - log.addLog(result.log); - } - } - } - } - - /** - * Returns the number of errors, warnings, infos among children logs - */ - private logStats(): any { - const ret = { - info: 0, - warning: 0, - error: 0 - }; - if (this._mrcResults.result && this._mrcResults.result.hasLog()) { - for (const re of this._mrcResults.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; - } - } - } - } - } - for (const cr of this._mrcResults.childrenResults) { - if (cr && cr.hasLog()) { - for (const re of cr.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(); - if (this._mrcResults && this.mrcResults.variatedParameters.length > 0) { - this.mergeGlobalLog(this._mrcResults.result, l); - // un problème avec la MRC en général / les cloisons, à une étape quelconque ? - if ( - (this.mrcResults.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); - // l.add(new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED)); - } - } // sinon pas de log global (aucun paramètre ne varie) - return l; + return this._logHelper.globalLog; } - /** - * 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._mrcResults) { - if (this.mrcResults.variatedParameters.length > 0) { - // A. si un paramètre varie - const vi = this._mrcResults.variableIndex; - // log de la MRC pour l'itération en cours - if ( - this._mrcResults.result - && this._mrcResults.result.hasResultElements() - && this._mrcResults.result.resultElements[vi] - && this._mrcResults.result.resultElements[vi].hasLog() - ) { - l.addLog(this._mrcResults.result.resultElements[vi].log); - } - // logs des enfants pour l'itération en cours - for (const cr of this._mrcResults.childrenResults) { - if (cr && cr.hasResultElements() && cr.resultElements[vi].hasLog()) { - l.addLog(cr.resultElements[vi].log); - } - } - } else { - // B. si aucun paramètre ne varie - this.mergeGlobalLog(this._mrcResults.result, l); // faut bien mettre le log global quelque part - // logs des enfants - for (const cr of this._mrcResults.childrenResults) { - if (cr && cr.hasResultElements() && cr.resultElement.hasLog()) { - l.addLog(cr.resultElement.log); - } - } - } - } - return l; + return this._logHelper.iterationLog; } public get mrcResults() { diff --git a/src/app/components/pab-results/pab-results.component.ts b/src/app/components/pab-results/pab-results.component.ts index bb190be6a1e861fcf81ffa3a2079ef2efd85ad72..0a07770454e0052412f1931d1014df807dccfde0 100644 --- a/src/app/components/pab-results/pab-results.component.ts +++ b/src/app/components/pab-results/pab-results.component.ts @@ -1,4 +1,5 @@ import { Component, Input } from "@angular/core"; +import { LogHelper } from "app/results/log-helper"; import { Result, cLog, Message, MessageCode, MessageSeverity } from "jalhyd"; @@ -19,6 +20,8 @@ export class PabResultsComponent extends ResultsComponentDirective { /** résultats non mis en forme */ private _pabResults: PabResults; + private _logHelper: LogHelper; + constructor( private i18nService: I18nService, ) { @@ -30,167 +33,18 @@ export class PabResultsComponent extends ResultsComponentDirective { this._pabResults = undefined; if (rs.length > 0 && rs[0] instanceof PabResults) { this._pabResults = rs[0] as PabResults; - } - } - - 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.pabResults.variatedParameters.length === 0) { - if (result.hasResultElements() && result.resultElement.hasLog()) { - log.addLog(result.log); - } - } - } - } - /** - * Returns the number of errors, warnings, infos among children logs - */ - private logStats(): any { - const ret = { - info: 0, - warning: 0, - error: 0 - }; - if (this._pabResults.result && this._pabResults.result.hasLog()) { - for (const re of this._pabResults.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; - } - } - } - } - } - for (const cr of this._pabResults.cloisonsResults) { - if (cr && cr.hasLog()) { - for (const re of cr.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; - } - } - } - } - } - } - if (this._pabResults.cloisonAvalResults && this._pabResults.cloisonAvalResults.hasLog()) { - for (const re of this._pabResults.cloisonAvalResults.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; - } - } - } - } + // log helper + this._logHelper = new LogHelper(this._pabResults, this._pabResults.cloisonsResults, this._pabResults.cloisonAvalResults); } - 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(); - if (this._pabResults && this.pabResults.variatedParameters.length > 0) { - this.mergeGlobalLog(this._pabResults.result, l); - // un problème avec la PAB en général / les cloisons, à une étape quelconque ? - if ( - (this.pabResults.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); - // l.add(new Message(MessageCode.WARNING_PROBLEMS_ENCOUNTERED)); - } - } // sinon pas de log global (aucun paramètre ne varie) - return l; + return this._logHelper.globalLog; } - /** - * 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._pabResults) { - if (this.pabResults.variatedParameters.length > 0) { - // A. si un paramètre varie - const vi = this._pabResults.variableIndex; - // log de la PAB pour l'itération en cours - if ( - this._pabResults.result - && this._pabResults.result.hasResultElements() - && this._pabResults.result.resultElements[vi] - && this._pabResults.result.resultElements[vi].hasLog() - ) { - l.addLog(this._pabResults.result.resultElements[vi].log); - } - // logs des enfants pour l'itération en cours - for (const cr of this._pabResults.cloisonsResults) { - if (cr && cr.hasResultElements() && cr.resultElements[vi].hasLog()) { - l.addLog(cr.resultElements[vi].log); - } - } - if (this._pabResults.cloisonAvalResults && this._pabResults.cloisonAvalResults.resultElements[vi].hasLog()) { - l.addLog(this._pabResults.cloisonAvalResults.resultElements[vi].log); - } - } else { - // B. si aucun paramètre ne varie - this.mergeGlobalLog(this._pabResults.result, l); // faut bien mettre le log global quelque part - // logs des enfants - for (const cr of this._pabResults.cloisonsResults) { - if (cr && cr.hasResultElements() && cr.resultElement.hasLog()) { - l.addLog(cr.resultElement.log); - } - } - if (this._pabResults.cloisonAvalResults && this._pabResults.cloisonAvalResults.resultElement.hasLog()) { - l.addLog(this._pabResults.cloisonAvalResults.resultElement.log); - } - } - } - return l; + return this._logHelper.iterationLog; } public get pabResults() { diff --git a/src/app/components/pb-results/pb-results.component.ts b/src/app/components/pb-results/pb-results.component.ts index a5136f9e92a69a0480a7025c9b81495fe978a59c..4b0f2b77a6c5aca2cc9f98478d21cc394dd58714 100644 --- a/src/app/components/pb-results/pb-results.component.ts +++ b/src/app/components/pb-results/pb-results.component.ts @@ -5,6 +5,8 @@ import { PrebarrageResults } from "../../results/prebarrage-results"; import { I18nService } from "../../services/internationalisation.service"; import { cLog, Message, MessageCode, MessageSeverity, PreBarrage, Result } from "jalhyd"; +import { ServiceFactory } from "app/services/service-factory"; +import { LogHelper } from "app/results/log-helper"; @Component({ selector: "pb-results", @@ -18,6 +20,8 @@ export class PbResultsComponent { /** résultats des bassins, non mis en forme */ private _pbResults: PrebarrageResults; + private _logHelper: LogHelper; + constructor( private i18nService: I18nService, ) { } @@ -25,9 +29,23 @@ export class PbResultsComponent { @Input() public set results(rs: CalculatorResults[]) { this._pbResults = undefined; + this._logHelper = undefined; for (const r of rs) { if (r instanceof PrebarrageResults) { this._pbResults = r as PrebarrageResults; + + // log helper + + const childResults: Result[] = []; + const sn = this._pbResults.result?.sourceNub as PreBarrage; + if (sn?.children) { + for (const cr of sn.children) { + if (cr.result) { + childResults.push(cr.result); + } + } + } + this._logHelper = new LogHelper(this._pbResults, childResults); } } } @@ -56,149 +74,12 @@ export class PbResultsComponent { 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); - } - } - } - } - - /** - * 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) { - 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; + return this._logHelper.globalLog; } - /** - * 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 - if (pb !== undefined) { - 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 - if (pb !== undefined) { - for (const pbc of pb.children) { - if (pbc?.result?.hasResultElements() && pbc.result.resultElement?.hasLog()) { - l.addLog(pbc.result.resultElement.log); - } - } - } - } - } - return l; + return this._logHelper.iterationLog; } public get uitextGeneralLogTitle(): string { diff --git a/src/app/results/log-helper.ts b/src/app/results/log-helper.ts new file mode 100644 index 0000000000000000000000000000000000000000..1f24f07acc43ead8f700525f49e66653d889ff1f --- /dev/null +++ b/src/app/results/log-helper.ts @@ -0,0 +1,172 @@ +import { cLog, Message, MessageCode, MessageSeverity, Result } from "jalhyd"; +import { MultiDimensionResults } from "./multidimension-results"; + +/** + * calculation log helpers + */ +export class LogHelper { + constructor(private _mdr: MultiDimensionResults, private _childrenResults: Result[], private _extraResult?: Result) { + } + + 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._mdr.variatedParameters.length === 0) { + if (result.hasResultElements() && result.resultElement.hasLog()) { + log.addLog(result.log); + } + } + } + } + + /** + * Returns the number of errors, warnings, infos among children logs + */ + private logStats(): any { + const ret = { + info: 0, + warning: 0, + error: 0 + }; + if (this._mdr.result?.hasLog()) { + for (const re of this._mdr.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; + } + } + } + } + } + for (const cr of this._childrenResults) { // bassins et cloisons + if (cr && cr.hasLog()) { + for (const re of cr.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; + } + } + } + } + } + } + if (this._extraResult?.hasLog()) { + for (const re of this._extraResult.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(); + if (this._mdr && this._mdr.variatedParameters.length > 0) { + this.mergeGlobalLog(this._mdr.result, l); + // un problème avec le nub en général / les cloisons / les bassins, à une étape quelconque ? + if ( + (this._mdr.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._mdr?.result) { + if (this._mdr.variatedParameters.length > 0) { + // A. si un paramètre varie + const vi = this._mdr.variableIndex; + // log du PB pour l'itération en cours + if ( + this._mdr.result + && this._mdr.result.hasResultElements() + && this._mdr.result.resultElements[vi] + && this._mdr.result.resultElements[vi]?.hasLog() + ) { + l.addLog(this._mdr.result.resultElements[vi].log); + } + // logs des enfants pour l'itération en cours + for (const cr of this._childrenResults) { + if (cr.hasResultElements() && cr.resultElements[vi]?.hasLog()) { + l.addLog(cr.resultElements[vi].log); + } + } + // extra results + if (this._extraResult?.resultElements[vi].hasLog()) { + // l.addLog(this._pabResults.cloisonAvalResults.resultElements[vi].log); + l.addLog(this._extraResult.resultElements[vi].log); + } + } else { + // B. si aucun paramètre ne varie + this.mergeGlobalLog(this._mdr.result, l); // faut bien mettre le log global quelque part + // logs des enfants + for (const cr of this._childrenResults) { + if (cr.hasResultElements() && cr.resultElement?.hasLog()) { + l.addLog(cr.resultElement.log); + } + } + // extra result + if (this._extraResult?.resultElement.hasLog()) { + l.addLog(this._extraResult.resultElement.log); + } + } + } + return l; + } +}