From 8a2dd6b54e7f5d5294a5ed1e338b74efce674cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 1 Feb 2023 10:15:01 +0100 Subject: [PATCH] fix: session file with single Lechapt-Calmon nub not properly imported refs #334 --- src/session.ts | 56 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/src/session.ts b/src/session.ts index ac886dc3..f9f6ef3b 100644 --- a/src/session.ts +++ b/src/session.ts @@ -322,22 +322,56 @@ export class Session { return foundNub; } + private static parameterIndex(obj: any, symbol: string): number { + let i; + const prms = obj["parameters"]; + for (i in prms) { + if (prms[i]["symbol"] === symbol) { + return +i; + } + } + return -1; + } + /** * Calcule le type de calculette compatible et modifie les propriétés en conséquence. * Permet de charger des fichiers session avec une version antérieure. * Par ex : Lechapt-Calmon -> PressureLoss */ - public static compatibleCalculatorProps(props: IProperties): IProperties { - const ct: CalculatorType = props.getPropValue("calcType"); - switch (ct) { + private compatibleCalculator(obj: any): any { + switch (obj["props"]["calcType"]) { case CalculatorType.LechaptCalmon: - const newProps: Props = new Props(props); - newProps.setPropValue("calcType", CalculatorType.PressureLoss); - newProps.setPropValue("pressureLossType", PressureLossType.LechaptCalmon); - return newProps; + // create parent PressureLoss nub + const plProps = new Props(); + plProps.setPropValue("calcType", CalculatorType.PressureLoss); + const pl = this.createNub(plProps); + + // JSON representation + let res: any = pl.objectRepresentation(); + + // set Lechapt-Calmon as child + res["children"] = [obj]; + + // move PressureLoss parameters from Lechapt-Calmon + const movedParams = ["Q", "D", "J", "Lg", "Kloc"]; + for (const p of movedParams) { + // if child has parameter + const cp = Session.parameterIndex(obj, p); + if (cp !== -1) { + const pp = Session.parameterIndex(res, p); + if (pp === -1) { + res["parameters"].push(obj["parameters"][cp]); + } else { + res["parameters"][pp] = obj["parameters"][cp]; + } + // delete obj["parameters"][pp]; + obj["parameters"].splice(cp, 1); + } + } + return res; default: - return props; + return obj; } } @@ -351,9 +385,7 @@ export class Session { * définies dans le constructeur du Nub créé * @param dbg activer débogage */ - public createNub(props: IProperties, parentNub?: Nub, dbg: boolean = false): Nub { - const params = Session.compatibleCalculatorProps(props); - + public createNub(params: IProperties, parentNub?: Nub, dbg: boolean = false): Nub { // true if provided values to parameter creation must be ignored const nullParams: boolean = params.getPropValue(Prop_NullParameters) === undefined ? false : params.getPropValue(Prop_NullParameters); @@ -1015,6 +1047,8 @@ export class Session { meta: undefined, hasErrors: false }; + // get upward compatible calculator + obj = this.compatibleCalculator(obj); // decode properties const props = Props.invertEnumKeysAndValuesInProperties(obj.props, true); // create the Nub -- GitLab