diff --git a/src/session.ts b/src/session.ts index ac886dc36c3ebe5304dcb8f1e0213ed0e17b422b..f9f6ef3b7879a1b9b657f8e66affb92e4cac5095 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