Skip to content
Snippets Groups Projects
Commit f52a3663 authored by Mathias Chouet's avatar Mathias Chouet Committed by mathias.chouet
Browse files

Added VerificateurResults

improved calculator results organization
updated e2e
parent bfb7af4d
No related branches found
No related tags found
No related merge requests found
Showing
with 362 additions and 81 deletions
......@@ -6,7 +6,7 @@ import { browser, by, element } from "protractor";
/**
* Calculate all modules of all examples
*/
describe("ngHyd − calculate all modules of all examples −", async () => {
describe("ngHyd − example sessions −", async () => {
let listPage: ListPage;
let calcPage: CalculatorPage;
......
......@@ -125,6 +125,8 @@ export class CalculatorPage {
||
await element(by.css("fixedvar-results results-chart > chart-results-container")).isPresent()
||
await element(by.css("section-results fixed-results > .fixed-results-container")).isPresent()
||
await element(by.css("remous-results #main-chart")).isPresent()
||
await element(by.css("pab-results pab-results-table")).isPresent()
......
......@@ -72,6 +72,7 @@ import { SectionCanvasComponent } from "./components/section-canvas/section-canv
import { RemousResultsComponent } from "./components/remous-results/remous-results.component";
import { ResultsChartComponent } from "./components/results-chart/results-chart.component";
import { PabResultsComponent } from "./components/pab-results/pab-results.component";
import { VerificateurResultsComponent } from "./components/verificateur-results/verificateur-results.component";
import { PabResultsTableComponent } from "./components/pab-results/pab-results-table.component";
import { ChartTypeSelectComponent } from "./components/results-chart/chart-type.component";
import { LogComponent } from "./components/log/log.component";
......@@ -215,6 +216,7 @@ const appRoutes: Routes = [
NgParamInputComponent,
PabProfileChartComponent,
PabResultsComponent,
VerificateurResultsComponent,
PabResultsTableComponent,
PabTableComponent,
VariableResultsSelectorComponent,
......
<div>
<section-results></section-results>
<remous-results></remous-results>
<pab-results></pab-results>
<macrorugo-compound-results></macrorugo-compound-results>
<jet-results></jet-results>
<fixedvar-results></fixedvar-results>
<section-results [hidden]="! isSP"></section-results>
<remous-results [hidden]="! isRemous"></remous-results>
<pab-results [hidden]="! isPAB"></pab-results>
<verificateur-results [hidden]="! isVerificateur"></verificateur-results>
<macrorugo-compound-results [hidden]="! isMRC"></macrorugo-compound-results>
<jet-results [hidden]="! isJet"></jet-results>
<fixedvar-results [hidden]="! showGenericResults"></fixedvar-results>
</div>
......@@ -8,6 +8,9 @@ import { MacrorugoCompoundResultsComponent } from "../macrorugo-compound-results
import { FormulaireDefinition } from "../../formulaire/definition/form-definition";
import { JetResultsComponent } from "../jet-results/jet-results.component";
import { GenericCalculatorComponent } from "../generic-calculator/calculator.component";
import { VerificateurResultsComponent } from "../verificateur-results/verificateur-results.component";
import { CalculatorType } from 'jalhyd';
@Component({
selector: "calc-results",
......@@ -41,6 +44,12 @@ export class CalculatorResultsComponent implements AfterViewChecked {
@ViewChild(PabResultsComponent, { static: true })
private pabResultsComponent: PabResultsComponent;
/**
* composant d'affichage des résultats des vérificateurs de critères de franchissement
*/
@ViewChild(VerificateurResultsComponent, { static: true })
private verificateurResultsComponent: VerificateurResultsComponent;
/**
* composant d'affichage des résultats des passes à macrorugosités complexes
*/
......@@ -63,45 +72,75 @@ export class CalculatorResultsComponent implements AfterViewChecked {
@Inject(forwardRef(() => GenericCalculatorComponent)) private calculatorComponent: GenericCalculatorComponent
) { }
// @TODO this system is sh*tty !
public set formulaire(f: FormulaireDefinition) {
this._formulaire = f;
if (this._formulaire === undefined) {
this.fixedVarResultsComponent.results = undefined;
this.sectionResultsComponent.results = undefined;
this.remousResultsComponent.results = undefined;
this.pabResultsComponent.results = undefined;
this.mrcResultsComponent.results = undefined;
this.jetResultsComponent.results = undefined;
this.mrcResultsComponent.results = undefined;
this.pabResultsComponent.results = undefined;
this.remousResultsComponent.results = undefined;
this.sectionResultsComponent.results = undefined;
this.verificateurResultsComponent.results = undefined;
} else {
this.sectionResultsComponent.results = f.results;
this.remousResultsComponent.results = f.results;
this.pabResultsComponent.results = f.results;
this.mrcResultsComponent.results = f.results;
// FixedVar and Jet are mutually incompatible (the 2nd extend the 1st)
if (this.isJet) {
this.jetResultsComponent.results = f.results;
this.fixedVarResultsComponent.results = undefined;
} else {
this.fixedVarResultsComponent.results = f.results;
this.jetResultsComponent.results = undefined;
}
if (this.showGenericResults) this.fixedVarResultsComponent.results = f.results;
if (this.isJet) this.jetResultsComponent.results = f.results;
if (this.isMRC) this.mrcResultsComponent.results = f.results;
if (this.isPAB) this.pabResultsComponent.results = f.results;
if (this.isRemous) this.remousResultsComponent.results = f.results;
if (this.isSP) this.sectionResultsComponent.results = f.results;
if (this.isVerificateur) this.verificateurResultsComponent.results = f.results;
}
}
public updateView() {
this.fixedVarResultsComponent.updateView();
this.sectionResultsComponent.updateView();
this.remousResultsComponent.updateView();
this.pabResultsComponent.updateView();
this.mrcResultsComponent.updateView();
this.jetResultsComponent.updateView();
if (this.showGenericResults) this.fixedVarResultsComponent.updateView();
if (this.isJet) this.jetResultsComponent.updateView();
if (this.isMRC) this.mrcResultsComponent.updateView();
if (this.isPAB) this.pabResultsComponent.updateView();
if (this.isRemous) this.remousResultsComponent.updateView();
if (this.isSP) this.sectionResultsComponent.updateView();
if (this.isVerificateur) this.verificateurResultsComponent.updateView();
}
public ngAfterViewChecked() {
this.afterViewChecked.emit();
}
public get isJet() {
/** Should we show the default FixedVarResultsComponent ? */
public get showGenericResults(): boolean {
return (
! this.isJet
&& ! this.isMRC
&& ! this.isPAB
&& ! this.isRemous
&& ! this.isSP
&& ! this.isVerificateur
)
}
public get isJet(): boolean {
return this.calculatorComponent.isJet;
}
public get isMRC(): boolean {
return this.calculatorComponent.isMRC;
}
public get isPAB(): boolean {
return this.calculatorComponent.isPAB;
}
public get isRemous(): boolean {
return this.calculatorComponent.is(CalculatorType.CourbeRemous);
}
public get isSP(): boolean {
return this.calculatorComponent.is(CalculatorType.SectionParametree);
}
public get isVerificateur(): boolean {
return this.calculatorComponent.is(CalculatorType.Verificateur);
}
}
......@@ -15,10 +15,6 @@ export class ResultsComponentDirective {
/** max number of decimals for auto-adjusting charts axis graduations */
public static CHARTS_AXIS_PRECISION = 10;
public constructor() {
const sf = <Screenfull>screenfull;
}
/** tracks the fullscreen state */
public get isFullscreen() {
const sf = <Screenfull>screenfull;
......
......@@ -46,8 +46,7 @@ export class JetResultsComponent extends FixedVarResultsComponent {
protected updateResults() {
const superUpdated = super.updateResults();
let trajectoryChartUpdated: boolean;
trajectoryChartUpdated = this.jetTrajectoryChartComponent !== undefined;
let trajectoryChartUpdated = this.jetTrajectoryChartComponent !== undefined;
if (trajectoryChartUpdated) {
// draw chart whether params are variating or not,
......
......@@ -66,7 +66,7 @@ export class PabResultsComponent implements DoCheck {
/**
* update results table and chart when the variable index changed (event sent by
* PabVariableResultsSelectorComponent); variable index is already set in
* VariableResultsSelectorComponent); variable index is already set in
* pabResults at this time
*/
public variableIndexChanged() {
......
......@@ -141,11 +141,6 @@ export class RemousResultsComponent extends ResultsComponentDirective implements
return this._tableHeaders;
}
public getResultClass(i: number) {
// tslint:disable-next-line:no-bitwise
return "result_id_" + String(i & 1);
}
public get hasResults(): boolean {
return this._remousResults !== undefined && this._remousResults.hasResults;
}
......
<div class="section-results-container" #sectionResults *ngIf="hasResults" fxLayout="row wrap" fxLayoutAlign="center center">
<div fxFlex="1 1 100%">
<div class="section-results-buttons">
<button mat-icon-button (click)="exportAsImage(sectionResults)" [title]="uitextExportImageTitle">
......@@ -18,3 +19,21 @@
</div>
</div>
</div>
<div class="container">
<!-- journal -->
<log></log>
<results-chart *ngIf="showVarResults"></results-chart>
<!--<results-chart [hidden]="! showVarResultsChart"></results-chart>-->
<div>
<!-- table des résultats fixés -->
<fixed-results [results]=fixedResults></fixed-results>
<!-- table des résultats variés -->
<div *ngIf="showVarResults">
<var-results [results]=varResults></var-results>
</div>
</div>
</div>
......@@ -5,9 +5,9 @@ import { ResultElement } from "jalhyd";
import { SectionCanvasComponent } from "../section-canvas/section-canvas.component";
import { SectionResults } from "../../results/section-results";
import { CalculatorResults } from "../../results/calculator-results";
import { ResultsComponentDirective } from "../fixedvar-results/results.component";
import { I18nService } from "../../services/internationalisation.service";
import { AppComponent } from "../../app.component";
import { FixedVarResultsComponent } from '../fixedvar-results/fixedvar-results.component';
@Component({
selector: "section-results",
......@@ -16,7 +16,7 @@ import { AppComponent } from "../../app.component";
"./section-results.component.scss"
]
})
export class SectionResultsComponent extends ResultsComponentDirective implements DoCheck {
export class SectionResultsComponent extends FixedVarResultsComponent implements DoCheck {
constructor(
private intlService: I18nService,
......@@ -26,6 +26,7 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
}
public set results(rs: CalculatorResults[]) {
super.results = rs;
this._resultElement = undefined;
this._results = undefined;
if (rs) {
......@@ -68,28 +69,17 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
*/
private _resultElement: ResultElement;
private _doUpdate = false;
@ViewChild(SectionCanvasComponent)
private _sectionCanvas: SectionCanvasComponent;
private _sectionCanvasComponent: SectionCanvasComponent;
public updateView() {
if (this._sectionCanvas) {
this._sectionCanvas.reset();
if (this._sectionCanvasComponent) {
this._sectionCanvasComponent.reset();
}
if (this._results) {
this._doUpdate = this._results.hasResults;
}
}
/**
* appelé pour gérer les changements non détectés par Angular
*/
public ngDoCheck() {
if (this._doUpdate) {
this._doUpdate = !this.updateResults();
}
super.updateView();
}
private isSectionLevel(s: string) {
......@@ -101,17 +91,18 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
return false;
}
private updateResults() {
if (this._results && this._sectionCanvas) {
protected updateResults() {
const superUpdated = super.updateResults();
if (this._results && this._sectionCanvasComponent !== undefined) {
this._resultElement = new ResultElement();
// compute canvas optimal size the first time
if (this._sectionCanvas.originalSize === undefined) {
if (this._sectionCanvasComponent.originalSize === undefined) {
const container = this.element.nativeElement.querySelector(".section-results-container");
const size = Math.min(container.offsetWidth, container.offsetHeight);
this._sectionCanvas.originalSize = size - 17; // 417 - 17 = 400
this._sectionCanvas.size = this._sectionCanvas.originalSize;
this._sectionCanvasComponent.originalSize = size - 17; // 417 - 17 = 400
this._sectionCanvasComponent.size = this._sectionCanvasComponent.originalSize;
}
// traduction des symboles des variables calculées
......@@ -123,30 +114,25 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
this._resultElement.addExtraResult(lbl, er);
if (this.isSectionLevel(k)) {
this._sectionCanvas.addLevel(er, k + " = " + this.formattedValue(er), SectionResultsComponent.labelColors[k]);
this._sectionCanvasComponent.addLevel(er, k + " = " + this.formattedValue(er), SectionResultsComponent.labelColors[k]);
}
}
}
// ajout du tirant d'eau saisi
const valY = this._results.result.sourceNub.getParameter("Y").singleValue;
this._sectionCanvas.addLevel(valY, "Y = " + this.formattedValue(valY), SectionResultsComponent.labelColors["Y"]);
this._sectionCanvasComponent.addLevel(valY, "Y = " + this.formattedValue(valY), SectionResultsComponent.labelColors["Y"]);
// wait just a little to draw, in case this._sectionCanvas.size was changed above (1st run)
setTimeout(() => {
if (this._results && this._results.section) {
this._sectionCanvas.section = this._results.section;
this._sectionCanvasComponent.section = this._results.section;
}
}, 100);
return true;
}
return false;
}
public getResultClass(i: number) {
// tslint:disable-next-line:no-bitwise
return "result_id_" + String(i & 1);
let canvasUpdated = (! this.hasResults || this._sectionCanvasComponent !== undefined);
return superUpdated && canvasUpdated;
}
public exportAsImage(element: HTMLDivElement) {
......@@ -155,10 +141,10 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
/** redraw canvas on fullscreen state change (scale drawing) */
public fullscreenChange(isFullscreen: boolean) {
this._sectionCanvas.size = this.getContainerSize(! isFullscreen);
this.previousContainerSize = this._sectionCanvas.size;
this._sectionCanvasComponent.size = this.getContainerSize(! isFullscreen);
this.previousContainerSize = this._sectionCanvasComponent.size;
setTimeout(() => {
this._sectionCanvas.draw();
this._sectionCanvasComponent.draw();
}, 100);
}
......@@ -173,7 +159,7 @@ export class SectionResultsComponent extends ResultsComponentDirective implement
// when going back from fullscreen mode, container size tends to be
// too high for whatever reason; use originalSize on this purpose
if (useOriginalSize) {
size = Math.min(size, this._sectionCanvas.originalSize);
size = Math.min(size, this._sectionCanvasComponent.originalSize);
}
return size;
}
......
<div class="container">
<log #generalLog [logTitle]="uitextGeneralLogTitle">log général</log>
<variable-results-selector [results]="verificateurResults" (indexChange)="variableIndexChanged()">
</variable-results-selector>
<log #iterationLog></log>
</div>
import { Component, ViewChild, DoCheck } from "@angular/core";
import { cLog } from "jalhyd";
import { LogComponent } from "../log/log.component";
import { CalculatorResults } from "../../results/calculator-results";
import { VariableResultsSelectorComponent } from "../variable-results-selector/variable-results-selector.component";
import { I18nService } from "../../services/internationalisation.service";
import { VerificateurResults } from "../../results/verificateur-results";
import { ResultsComponentDirective } from '../fixedvar-results/results.component';
@Component({
selector: "verificateur-results",
templateUrl: "./verificateur-results.component.html",
styleUrls: [
"./verificateur-results.component.scss"
]
})
export class VerificateurResultsComponent extends ResultsComponentDirective implements DoCheck {
/** résultats non mis en forme */
private _verificateurResults: VerificateurResults;
/** true si les résultats doiventt être remis à jour */
private _doUpdate = false;
@ViewChild(VariableResultsSelectorComponent)
private variableResultsSelectorComponent: VariableResultsSelectorComponent;
@ViewChild("generalLog")
private generalLogComponent: LogComponent;
@ViewChild("iterationLog")
private iterationLogComponent: LogComponent;
constructor(
private i18nService: I18nService,
) {
super();
}
public set results(rs: CalculatorResults[]) {
this._verificateurResults = undefined;
if (rs.length > 0 && rs[0] instanceof VerificateurResults) {
this._verificateurResults = rs[0] as VerificateurResults;
}
this.updateView();
}
/**
* update iteration log when the variable index changed (event sent by
* VariableResultsSelectorComponent); variable index is already set in
* verificateurResults at this time
*/
public variableIndexChanged() {
this.updateView();
}
public updateView() {
if (this.iterationLogComponent) {
this.iterationLogComponent.log = undefined;
}
if (this.generalLogComponent) {
this.generalLogComponent.log = undefined;
}
if (this.variableResultsSelectorComponent) {
this.variableResultsSelectorComponent.results = undefined;
}
// set _doUpdate flag so that results are rebuilt on the next Angular display cycle
this._doUpdate = false;
if (this._verificateurResults !== undefined) {
this._doUpdate = this._doUpdate || this._verificateurResults.hasResults || this._verificateurResults.hasLog;
}
}
public ngDoCheck() {
if (this._doUpdate) {
this._doUpdate = !this.updateResults();
}
}
/*
* Retourne les messages à afficher dans le composant de log global, au dessus
* du sélecteur d'itération : messages globaux du Verificateur
*/
private get globalLog(): cLog {
const l = new cLog();
if (this._verificateurResults && this._verificateurResults.result && this._verificateurResults.result.hasGlobalLog()) {
l.addLog(this._verificateurResults.result.globalLog);
}
return l;
}
/**
* Retourne les messages à afficher dans le composant de log "du bas" : logs de l'itération
* en cours (messages non-globaux du Vérificateur et eds Espèce), que le résultat varie ou non
*/
private get iterationLog(): cLog {
const l = new cLog();
if (this._verificateurResults) {
// = 0 lorsque rien ne varie
const vi = this._verificateurResults.variableIndex;
// log du Verificateur pour l'itération en cours
if (
this._verificateurResults.result
&& this._verificateurResults.result.hasResultElements()
&& this._verificateurResults.result.resultElements[vi]
&& this._verificateurResults.result.resultElements[vi].hasLog()
) {
l.addLog(this._verificateurResults.result.resultElements[vi].log);
}
// logs des Espece pour l'itération en cours
for (const er of this._verificateurResults.especeResults) {
if (er && er.hasResultElements() && er.resultElements[vi].hasLog()) {
l.addLog(er.resultElements[vi].log);
}
}
}
return l;
}
/**
* met à jour l'affichage des résultats
* @returns true si les résultats ont pu être mis à jour
*/
private updateResults() {
let selectorUpdated: boolean;
// results or not, there might be a log
const logUpdated = (this.iterationLogComponent !== undefined || this.generalLogComponent !== undefined); // gne ?
if (logUpdated) {
// order of logs is important !
this.iterationLogComponent.log = this.iterationLog;
this.generalLogComponent.log = this.globalLog;
}
if (this.hasResults) {
selectorUpdated = this.variableResultsSelectorComponent !== undefined;
if (selectorUpdated) {
this.variableResultsSelectorComponent.results = this._verificateurResults;
}
} else {
selectorUpdated = true;
}
return logUpdated && selectorUpdated;
}
public get verificateurResults() {
return this._verificateurResults;
}
public get hasResults(): boolean {
return this._verificateurResults && this._verificateurResults.hasResults;
}
public get uitextGeneralLogTitle(): string {
return this.i18nService.localizeText("INFO_TITREJOURNAL_GLOBAL");
}
}
......@@ -82,7 +82,7 @@ export class FormulairePab extends FormulaireDefinition {
return this._pabResults;
}
public resetResults() {
public resetResults() { // @TODO why not resetFormResults() only ?
this._pabResults.reset();
}
......
import { IObservable, Nub, Verificateur } from "jalhyd";
import { IObservable, Nub, Verificateur, Result } from "jalhyd";
import { SelectFieldCustom } from "../elements/select-field-custom";
import { FormulaireFixedVar } from "./form-fixedvar";
import { VerificateurResults } from "../../results/verificateur-results";
import { CalculatorResults } from "../../results/calculator-results";
/**
* Formulaire pour les Vérificateurs
*/
export class FormulaireVerificateur extends FormulaireFixedVar {
protected _verificateurResults: VerificateurResults;
constructor() {
super();
this._verificateurResults = new VerificateurResults();
}
public get verificateurNub(): Verificateur {
return this.currentNub as Verificateur;
}
public get verificateurResults() {
return this._verificateurResults;
}
protected compute() {
this.runNubCalc(this.currentNub);
// reset variable index to avoid trying to access an index > 0 when nothing varies
const mrcr = this.verificateurResults;
mrcr.variableIndex = 0;
this.reaffectResultComponents();
}
protected reaffectResultComponents() {
const ver: Verificateur = (this.currentNub as Verificateur);
// const varParams: NgParameter[] = this.getVariatedParameters();
// résultat de calcul de la passe à macrorugo complexe
const vr = this.verificateurResults;
// vr.calculatedParameter = computedParam;
vr.result = ver.result;
/* if (varParams) {
vr.variatedParameters = varParams;
} */
vr.variatedParameters = [];
// résultat de chaque Espece
const er: Result[] = [];
for (const sp of ver.species) {
er.push(sp.result);
}
vr.especeResults = er;
}
public resetFormResults() {
this._verificateurResults.reset();
}
public get results(): CalculatorResults[] {
return [ this._verificateurResults ];
}
public get hasResults(): boolean {
return this._verificateurResults.hasResults;
}
// interface Observer
public update(sender: IObservable, data: any) {
......
......@@ -20,7 +20,7 @@ export abstract class CalculatedParamResults extends CalculatorResults {
/** custom variables order for results tables */
public variablesOrder: string[] = [];
protected reset() {
public reset() {
this._calculatedParam = undefined;
this.calculatedParameterHeader = undefined;
this.result = undefined;
......
import { MultiDimensionResults } from "./multidimension-results";
import { Result } from 'jalhyd';
export class VerificateurResults extends MultiDimensionResults {
/** résultats des modules Espece */
public especeResults: Result[];
public reset() {
super.reset();
this.especeResults = [];
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment