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 {
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
......
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