Commit 8a2dd6b5 authored by Grand Francois's avatar Grand Francois
Browse files

fix: session file with single Lechapt-Calmon nub not properly imported

refs #334
Showing with 45 additions and 11 deletions
+45 -11
...@@ -322,22 +322,56 @@ export class Session { ...@@ -322,22 +322,56 @@ export class Session {
return foundNub; 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. * 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. * Permet de charger des fichiers session avec une version antérieure.
* Par ex : Lechapt-Calmon -> PressureLoss * Par ex : Lechapt-Calmon -> PressureLoss
*/ */
public static compatibleCalculatorProps(props: IProperties): IProperties { private compatibleCalculator(obj: any): any {
const ct: CalculatorType = props.getPropValue("calcType"); switch (obj["props"]["calcType"]) {
switch (ct) {
case CalculatorType.LechaptCalmon: case CalculatorType.LechaptCalmon:
const newProps: Props = new Props(props); // create parent PressureLoss nub
newProps.setPropValue("calcType", CalculatorType.PressureLoss); const plProps = new Props();
newProps.setPropValue("pressureLossType", PressureLossType.LechaptCalmon); plProps.setPropValue("calcType", CalculatorType.PressureLoss);
return newProps; 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: default:
return props; return obj;
} }
} }
...@@ -351,9 +385,7 @@ export class Session { ...@@ -351,9 +385,7 @@ export class Session {
* définies dans le constructeur du Nub créé * définies dans le constructeur du Nub créé
* @param dbg activer débogage * @param dbg activer débogage
*/ */
public createNub(props: IProperties, parentNub?: Nub, dbg: boolean = false): Nub { public createNub(params: IProperties, parentNub?: Nub, dbg: boolean = false): Nub {
const params = Session.compatibleCalculatorProps(props);
// true if provided values to parameter creation must be ignored // true if provided values to parameter creation must be ignored
const nullParams: boolean = params.getPropValue(Prop_NullParameters) === undefined ? false : params.getPropValue(Prop_NullParameters); const nullParams: boolean = params.getPropValue(Prop_NullParameters) === undefined ? false : params.getPropValue(Prop_NullParameters);
...@@ -1015,6 +1047,8 @@ export class Session { ...@@ -1015,6 +1047,8 @@ export class Session {
meta: undefined, meta: undefined,
hasErrors: false hasErrors: false
}; };
// get upward compatible calculator
obj = this.compatibleCalculator(obj);
// decode properties // decode properties
const props = Props.invertEnumKeysAndValuesInProperties(obj.props, true); const props = Props.invertEnumKeysAndValuesInProperties(obj.props, true);
// create the Nub // create the Nub
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment