From 75137e4bd038554c4a5d9e28b69c7d5efeb8616d Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Tue, 21 May 2019 16:20:44 +0200 Subject: [PATCH] Fix #215 --- .../dialog-load-session.component.html | 8 +++++++ .../dialog-load-session.component.scss | 6 ++++- .../dialog-load-session.component.ts | 23 ++++++++++++++++++- .../services/formulaire/formulaire.service.ts | 14 ++++++++--- src/locale/messages.en.json | 1 + src/locale/messages.fr.json | 1 + 6 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/app/components/dialog-load-session/dialog-load-session.component.html b/src/app/components/dialog-load-session/dialog-load-session.component.html index ff34d88ed..89554f085 100644 --- a/src/app/components/dialog-load-session/dialog-load-session.component.html +++ b/src/app/components/dialog-load-session/dialog-load-session.component.html @@ -28,6 +28,14 @@ </button> </div> + <div class="format-problem" *ngIf="fileFormatVersionProblem"> + <mat-list role="list"> + <mat-list-item role="listitem"> + <mat-icon color="warn">error_outline</mat-icon> {{ uitextFileFormatVersionProblem }} + </mat-list-item> + </mat-list> + </div> + <div class="dependencies-problems" *ngIf="dependenciesProblems.length > 0"> <mat-list role="list"> <mat-list-item role="listitem" *ngFor="let dp of dependenciesProblems"> diff --git a/src/app/components/dialog-load-session/dialog-load-session.component.scss b/src/app/components/dialog-load-session/dialog-load-session.component.scss index f9cad2765..38df56667 100644 --- a/src/app/components/dialog-load-session/dialog-load-session.component.scss +++ b/src/app/components/dialog-load-session/dialog-load-session.component.scss @@ -18,7 +18,11 @@ mat-form-field { } } -.dependencies-problems { +.format-problem { + margin-bottom: 1em; +} + +.dependencies-problems, .format-problem { .mat-list-base { padding-top: 0; diff --git a/src/app/components/dialog-load-session/dialog-load-session.component.ts b/src/app/components/dialog-load-session/dialog-load-session.component.ts index 5d9014430..117444a1c 100644 --- a/src/app/components/dialog-load-session/dialog-load-session.component.ts +++ b/src/app/components/dialog-load-session/dialog-load-session.component.ts @@ -1,12 +1,15 @@ import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material"; import { Inject, Component } from "@angular/core"; +import { config } from "jalhyd"; import { decode } from "he"; import { I18nService } from "../../services/internationalisation/internationalisation.service"; import { FormGroup, FormBuilder, Validators } from "@angular/forms"; import { ServiceFactory } from "../../services/service-factory"; +import { sprintf } from "sprintf-js"; + @Component({ selector: "dialog-load-session", templateUrl: "dialog-load-session.component.html", @@ -16,6 +19,10 @@ export class DialogLoadSessionComponent { public calculators: any[] = []; + public fileFormatVersion: string; + + public libFormatVersion: string; + public file: any; public loadSessionForm: FormGroup; @@ -33,6 +40,7 @@ export class DialogLoadSessionComponent { this.loadSessionForm = this.fb.group({ file: [null, Validators.required] }); + this.libFormatVersion = config.serialisation.fileFormatVersion; } public selectAll() { @@ -131,7 +139,8 @@ export class DialogLoadSessionComponent { const formService = ServiceFactory.instance.formulaireService; formService.calculatorInfosFromSessionFile(this.file).then( calcInfos => { - this.calculators = calcInfos; + this.fileFormatVersion = calcInfos.formatVersion; + this.calculators = calcInfos.nubs; for (const n of this.calculators) { n.selected = true; // if no title was given, generate a default one @@ -160,6 +169,10 @@ export class DialogLoadSessionComponent { return ok; } + public get fileFormatVersionProblem(): boolean { + return this.fileFormatVersion && (this.fileFormatVersion !== this.libFormatVersion); + } + public get uitextLoad() { return this.intlService.localizeText("INFO_OPTION_LOAD"); } @@ -191,4 +204,12 @@ export class DialogLoadSessionComponent { public get uitextEmptyCurrentSession() { return this.intlService.localizeText("INFO_DIALOG_EMPTY_CURRENT_SESSION"); } + + public get uitextFileFormatVersionProblem() { + return sprintf( + this.intlService.localizeText("INFO_DIALOG_FORMAT_VERSIONS_MISMATCH"), + this.fileFormatVersion, + this.libFormatVersion + ); + } } diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index 116bf898f..d33770c26 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -558,9 +558,13 @@ export class FormulaireService extends Observable { * obtient des infos (nom, uid des modules de calcul, dépendances) d'un fichier session * @param f fichier session */ - public calculatorInfosFromSessionFile(f: File): Promise<any[]> { + public calculatorInfosFromSessionFile(f: File): Promise<{ nubs: any[], formatVersion: string }> { return this.readSingleFile(f).then(s => { - const res: any[] = []; + // return value + const res: { nubs: any[], formatVersion: string } = { + nubs: [], + formatVersion: "" + }; const data = JSON.parse(s); // liste des noms de modules de calcul if (data.session && Array.isArray(data.session)) { @@ -601,9 +605,13 @@ export class FormulaireService extends Observable { nubInfo.children.push(p.uid); }); } - res.push(nubInfo); + res.nubs.push(nubInfo); }); } + // version du format de fichier + if (data.header && data.header.format_version) { + res.formatVersion = data.header.format_version; + } return res; }); } diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 2f56f60c7..b521d5451 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -60,6 +60,7 @@ "INFO_DIALOG_COMPUTED_VALUE_TITLE": "Edit initial value", "INFO_DIALOG_EMPTY_CURRENT_SESSION": "Empty current session", "INFO_DIALOG_FIX_MISSING_DEPENDENCIES": "Fix missing dependencies", + "INFO_DIALOG_FORMAT_VERSIONS_MISMATCH": "File format versions mismatch (file: %s, jalhyd: %s)", "INFO_DIALOG_LOAD_SESSION_FILENAME": "Choose a file", "INFO_DIALOG_LOAD_SESSION_TITLE": "Load calculator modules", "INFO_DIALOG_PAB_NB": "Number of falls", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index d18bb02e5..efa2d9ba8 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -60,6 +60,7 @@ "INFO_DIALOG_COMPUTED_VALUE_TITLE": "Modifier la valeur initiale", "INFO_DIALOG_EMPTY_CURRENT_SESSION": "Vider la session courante", "INFO_DIALOG_FIX_MISSING_DEPENDENCIES": "Résoudre les dépendances", + "INFO_DIALOG_FORMAT_VERSIONS_MISMATCH": "Mauvaise version du format de fichier (fichier: %s, jalhyd: %s)", "INFO_DIALOG_LOAD_SESSION_FILENAME": "Choisir un fichier", "INFO_DIALOG_LOAD_SESSION_TITLE": "Charger des modules de calcul", "INFO_DIALOG_PAB_NB": "Nombre de chutes", -- GitLab