From 44a3ba827733a9d6fe0f7b63c752fe5aa010c45e Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Wed, 27 Sep 2017 11:41:01 +0200
Subject: [PATCH] =?UTF-8?q?ajout=20de=20l'enum=20ComputeNodeType=20(n?=
 =?UTF-8?q?=C3=A9cessaire=20pour=20NgHyd=20pour=20distinguer=20les=20secti?=
 =?UTF-8?q?ons=20dans=20un=20m=C3=AAme=20formulaire)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 spec/nubtest.ts                   |  8 ++++----
 src/cond_distri.ts                | 12 ++++++------
 src/lechaptcalmon.ts              | 16 ++++++++--------
 src/param.ts                      | 28 +++++++++++++++++++++++++++-
 src/parameters.ts                 | 21 +++++++++++----------
 src/section/section_circulaire.ts | 10 ++++++++--
 src/section/section_puissance.ts  |  5 ++---
 src/section/section_rectang.ts    |  2 +-
 src/section/section_trapez.ts     |  6 +++---
 src/section/section_type.ts       | 29 ++++++++++++++---------------
 tsconfig.json                     |  3 +++
 11 files changed, 87 insertions(+), 53 deletions(-)

diff --git a/spec/nubtest.ts b/spec/nubtest.ts
index 1bc3bc30..0f57426d 100644
--- a/spec/nubtest.ts
+++ b/spec/nubtest.ts
@@ -1,6 +1,6 @@
 import { Result } from "../src/base";
 import { Nub } from "../src/nub";
-import { ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability, IParamsEquation } from "../src/param";
+import { ComputeNodeType, ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability, IParamsEquation } from "../src/param";
 
 class NubTestParams implements IParamsEquation {
     private _A: ParamDefinition;
@@ -8,9 +8,9 @@ class NubTestParams implements IParamsEquation {
     private _C: ParamDefinition;
 
     constructor() {
-        this._A = new ParamDefinition('A', ParamDomainValue.POS_NULL, 1);
-        this._B = new ParamDefinition('B', ParamDomainValue.POS_NULL, 2);
-        this._C = new ParamDefinition('C', ParamDomainValue.POS_NULL, 3);
+        this._A = new ParamDefinition(ComputeNodeType.Test, 'A', ParamDomainValue.POS_NULL, 1);
+        this._B = new ParamDefinition(ComputeNodeType.Test, 'B', ParamDomainValue.POS_NULL, 2);
+        this._C = new ParamDefinition(ComputeNodeType.Test, 'C', ParamDomainValue.POS_NULL, 3);
     }
 
     get A() {
diff --git a/src/cond_distri.ts b/src/cond_distri.ts
index e16ac129..7f187e9b 100644
--- a/src/cond_distri.ts
+++ b/src/cond_distri.ts
@@ -1,5 +1,5 @@
 import { Result } from "./base";
-import { ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability, IParamsEquation } from "./param";
+import { ComputeNodeType, ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability, IParamsEquation } from "./param";
 import { Nub } from "./nub";
 
 /**
@@ -22,11 +22,11 @@ export class ConduiteDistribParams implements IParamsEquation {
     Nu: ParamDefinition;
 
     constructor(rQ: number, rD: number, rJ: number, rLg: number, rNu: number) {
-        this.Q = new ParamDefinition('Q', ParamDomainValue.POS, rQ);
-        this.D = new ParamDefinition('D', ParamDomainValue.POS, rD);
-        this.J = new ParamDefinition('J', ParamDomainValue.POS, rJ);
-        this.Lg = new ParamDefinition('Lg', ParamDomainValue.POS, rLg);
-        this.Nu = new ParamDefinition('Nu', ParamDomainValue.POS, rNu);
+        this.Q = new ParamDefinition(ComputeNodeType.CondDistri, 'Q', ParamDomainValue.POS, rQ);
+        this.D = new ParamDefinition(ComputeNodeType.CondDistri, 'D', ParamDomainValue.POS, rD);
+        this.J = new ParamDefinition(ComputeNodeType.CondDistri, 'J', ParamDomainValue.POS, rJ);
+        this.Lg = new ParamDefinition(ComputeNodeType.CondDistri, 'Lg', ParamDomainValue.POS, rLg);
+        this.Nu = new ParamDefinition(ComputeNodeType.CondDistri, 'Nu', ParamDomainValue.POS, rNu);
     }
 }
 
diff --git a/src/lechaptcalmon.ts b/src/lechaptcalmon.ts
index c130e59a..ceba0fef 100644
--- a/src/lechaptcalmon.ts
+++ b/src/lechaptcalmon.ts
@@ -1,5 +1,5 @@
 import { Result } from "./base";
-import { ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability, IParamsEquation } from "./param";
+import { ComputeNodeType, ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability, IParamsEquation } from "./param";
 import { Nub } from "./nub";
 
 /**
@@ -28,13 +28,13 @@ export class LechaptCalmonParams implements IParamsEquation {
     private _N: ParamDefinition;
 
     constructor(rQ: number, rD: number, rJ: number, rLg: number, rL: number, rM: number, rN: number) {
-        this._Q = new ParamDefinition('Q', ParamDomainValue.POS, rQ);
-        this._D = new ParamDefinition('D', ParamDomainValue.POS, rD);
-        this._J = new ParamDefinition('J', ParamDomainValue.POS, rJ);
-        this._Lg = new ParamDefinition('Lg', ParamDomainValue.POS, rLg);
-        this._L = new ParamDefinition('L', ParamDomainValue.POS, rL);
-        this._M = new ParamDefinition('M', ParamDomainValue.POS, rM);
-        this._N = new ParamDefinition('N', ParamDomainValue.POS, rN);
+        this._Q = new ParamDefinition(ComputeNodeType.LechaptCalmon, 'Q', ParamDomainValue.POS, rQ);
+        this._D = new ParamDefinition(ComputeNodeType.LechaptCalmon, 'D', ParamDomainValue.POS, rD);
+        this._J = new ParamDefinition(ComputeNodeType.LechaptCalmon, 'J', ParamDomainValue.POS, rJ);
+        this._Lg = new ParamDefinition(ComputeNodeType.LechaptCalmon, 'Lg', ParamDomainValue.POS, rLg);
+        this._L = new ParamDefinition(ComputeNodeType.LechaptCalmon, 'L', ParamDomainValue.POS, rL);
+        this._M = new ParamDefinition(ComputeNodeType.LechaptCalmon, 'M', ParamDomainValue.POS, rM);
+        this._N = new ParamDefinition(ComputeNodeType.LechaptCalmon, 'N', ParamDomainValue.POS, rN);
     }
 
     get Q() {
diff --git a/src/param.ts b/src/param.ts
index 37c02884..670a6ff4 100644
--- a/src/param.ts
+++ b/src/param.ts
@@ -112,6 +112,11 @@ export class ParamDefinition extends DefinedNumber {
      */
     private _symbol: string;
 
+    /**
+     * alias du symbole
+     */
+    //    public symbolAlias: string;
+
     /**
      * calculabilité
      */
@@ -122,6 +127,11 @@ export class ParamDefinition extends DefinedNumber {
      */
     private _domain: ParamDomain;
 
+    /**
+     * noeud de calcul parent
+     */
+    private _computeNodeType: ComputeNodeType
+
     /**
      * ancienne valeur du paramètre
      */
@@ -136,8 +146,9 @@ export class ParamDefinition extends DefinedNumber {
     // private _id: number; // A VIRER
 
     // constructor(s: string, d: ParamDomain, c: ParamCalculability, val: number = undefined) {
-    constructor(s: string, d: any, val: number = undefined) {
+    constructor(nt: ComputeNodeType, s: string, d: ParamDomain | ParamDomainValue, val: number = undefined) {
         super(val);
+        this._computeNodeType = nt;
         this._symbol = s;
 
         if (d instanceof ParamDomain)
@@ -171,6 +182,11 @@ export class ParamDefinition extends DefinedNumber {
         return this._domain;
     }
 
+
+    get computeNodeType(): ComputeNodeType {
+        return this._computeNodeType;
+    }
+
     /*
      * méthodes de calculabilité
      */
@@ -344,6 +360,16 @@ export interface IParamsEquation {
     [key: string]: any;
 }
 
+/**
+ * type de noeud de calcul
+ */
+export enum ComputeNodeType {
+    CondDistri, RegimeUniforme, LechaptCalmon,
+    SectionParametree, // paramètres communs à toutes les sections paramétrées
+    SectionTrapeze, SectionRectangle, SectionCercle, SectionPuissance,
+    Test
+}
+
 /**
  * noeud de calcul
  */
diff --git a/src/parameters.ts b/src/parameters.ts
index 17c23d05..37a196a2 100644
--- a/src/parameters.ts
+++ b/src/parameters.ts
@@ -1,6 +1,7 @@
-import { IParamsEquation } from "./param";
+import { ComputeNodeType, IParamsEquation } from "./param";
 import { ConduiteDistribParams, ConduiteDistrib } from "./cond_distri";
 import { LechaptCalmonParams, LechaptCalmon } from "./lechaptcalmon";
+import { ParamsSection, acSection } from "./section/section_type";
 import { ParamsSectionTrapez, cSnTrapez } from "./section/section_trapez";
 import { ParamsSectionRectang, cSnRectang } from "./section/section_rectang";
 import { ParamsSectionCirc, cSnCirc } from "./section/section_circulaire";
@@ -17,44 +18,44 @@ export class ComputeNodeParameters {
         return ComputeNodeParameters._instance;
     }
 
-    public getComputeNodeParameters(name: string): IParamsEquation {
-        switch (name) {
-            case "cond_distri":
+    public getComputeNodeParameters(type: ComputeNodeType): IParamsEquation {
+        switch (type) {
+            case ComputeNodeType.CondDistri:
                 {
                     let cn = new ConduiteDistribParams(undefined, undefined, undefined, undefined, undefined);
                     let n = new ConduiteDistrib(cn); // pour initialiser la calculabilité des paramètres
                     return cn;
                 }
 
-            case "lechapt_calmon":
+            case ComputeNodeType.LechaptCalmon:
                 {
                     let cn = new LechaptCalmonParams(undefined, undefined, undefined, undefined, undefined, undefined, undefined);
                     let n = new LechaptCalmon(cn); // pour initialiser la calculabilité des paramètres
                     return cn;
                 }
 
-            case "section_param_trapez":
+            case ComputeNodeType.SectionTrapeze:
                 {
                     let cn = new ParamsSectionTrapez(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
                     let n = new cSnTrapez(undefined, cn); // pour initialiser la calculabilité des paramètres
                     return cn;
                 }
 
-            case "section_param_rect":
+            case ComputeNodeType.SectionRectangle:
                 {
                     let cn = new ParamsSectionRectang(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
                     let n = new cSnRectang(undefined, cn); // pour initialiser la calculabilité des paramètres
                     return cn;
                 }
 
-            case "section_param_circ":
+            case ComputeNodeType.SectionCercle:
                 {
                     let cn = new ParamsSectionCirc(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
                     let n = new cSnCirc(undefined, cn); // pour initialiser la calculabilité des paramètres
                     return cn;
                 }
 
-            case "section_param_para":
+            case ComputeNodeType.SectionPuissance:
                 {
                     let cn = new ParamsSectionPuiss(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined);
                     let n = new cSnPuiss(undefined, cn); // pour initialiser la calculabilité des paramètres
@@ -62,7 +63,7 @@ export class ComputeNodeParameters {
                 }
 
             default:
-                throw "ComputeNodeParameters.getComputeNodeParameters() : nub '" + name + "' non pris en charge";
+                throw "ComputeNodeParameters.getComputeNodeParameters() : noeud de calcul '" + ComputeNodeType[type] + "' non pris en charge";
         }
     }
 }
diff --git a/src/section/section_circulaire.ts b/src/section/section_circulaire.ts
index 09931c2a..7fd29262 100644
--- a/src/section/section_circulaire.ts
+++ b/src/section/section_circulaire.ts
@@ -1,13 +1,14 @@
-import { ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability } from "../param";
+import { ComputeNodeType, ParamDefinition, ParamDomainValue, ParamCalculability } from "../param";
 import { acSection, ParamsSection } from "./section_type";
 import { cLog } from "./log";
+import { ErrorMessage, ErrorCode } from '../util/error';
 
 export class ParamsSectionCirc extends ParamsSection {
         private _D: ParamDefinition;          // Diamètre du cercle
 
         constructor(rD: number, rY: number, rKs: number, rQ: number, rIf: number, rPrec: number, rYB: number, rYCL: number = undefined, rDx: number = undefined, rLong: number = undefined) {
                 super(rY, undefined, rKs, rQ, rIf, rPrec, rYB, rYCL);
-                this._D = new ParamDefinition('D', ParamDomainValue.POS, rD);
+                this._D = new ParamDefinition(ComputeNodeType.SectionCercle, 'D', ParamDomainValue.POS, rD);
         }
 
         /**
@@ -138,6 +139,11 @@ export class cSnCirc extends acSection {
                         this.debug("circ.Calc_B() : res=" + res);
                         return res;
                 }
+
+                let e: ErrorMessage = new ErrorMessage(ErrorCode.ERROR_PARAMDEF_VALUE_UNDEFINED);
+                e.extraVar["diameterValue"] = this.prms.D.isDefined ? String(this.prms.D.v) : "undefined";
+                e.extraVar["yValue"] = this.prms.Y.isDefined ? String(this.prms.Y.v) : "undefined";
+                throw e;
         }
 
         /**
diff --git a/src/section/section_puissance.ts b/src/section/section_puissance.ts
index b39afc56..c11e7fd0 100644
--- a/src/section/section_puissance.ts
+++ b/src/section/section_puissance.ts
@@ -1,8 +1,7 @@
-import { ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability } from "../param";
+import { ComputeNodeType, ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability } from "../param";
 import { acSection, ParamsSection } from "./section_type";
 import { cLog } from "./log";
 
-
 /**
  * Paramètres de la section parabolique ou "puissance"
  */
@@ -11,7 +10,7 @@ export class ParamsSectionPuiss extends ParamsSection {
 
         constructor(rk: number, rY: number, rLargeurBerge: number, rKs: number, rQ: number, rIf: number, rPrec: number, rYB: number, rYCL: number = 0, rDx: number = 0, rLong: number = 0) {
                 super(rY, rLargeurBerge, rKs, rQ, rIf, rPrec, rYB, rYCL);
-                this._k = new ParamDefinition('k', new ParamDomain(ParamDomainValue.INTERVAL, 0, 1), rk);
+                this._k = new ParamDefinition(ComputeNodeType.SectionPuissance, 'k', new ParamDomain(ParamDomainValue.INTERVAL, 0, 1), rk);
         }
 
         /**
diff --git a/src/section/section_rectang.ts b/src/section/section_rectang.ts
index 7f62985f..5d93e1ce 100644
--- a/src/section/section_rectang.ts
+++ b/src/section/section_rectang.ts
@@ -1,4 +1,3 @@
-import { ParamDefinition, ParamDomain, ParamCalculability } from "../param";
 import { acSection, ParamsSection } from "./section_type";
 import { cLog } from "./log";
 
@@ -7,6 +6,7 @@ export class ParamsSectionRectang extends ParamsSection {
                 super(rY,
                         rLargeurFond, // LargeurBerge=LargeurFond
                         rKs, rQ, rIf, rPrec, rYB, rYCL);
+                //    this.LargeurBerge.symbolAlias = 'LargeurFond';
         }
 }
 
diff --git a/src/section/section_trapez.ts b/src/section/section_trapez.ts
index 9ea275ea..bc9d8f0c 100644
--- a/src/section/section_trapez.ts
+++ b/src/section/section_trapez.ts
@@ -1,4 +1,4 @@
-import { ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability } from "../param";
+import { ComputeNodeType, ParamDefinition, ParamDomainValue, ParamCalculability } from "../param";
 import { acSection, ParamsSection } from "./section_type";
 import { cLog } from "./log";
 
@@ -9,8 +9,8 @@ export class ParamsSectionTrapez extends ParamsSection {
 
         constructor(rLargeurFond: number, rFruit: number, rY: number, rKs: number, rQ: number, rIf: number, rPrec: number, rYB: number, rYCL: number = 0, rDx: number = 0, rLong: number = 0) {
                 super(rY, undefined, rKs, rQ, rIf, rPrec, rYB, rYCL);
-                this._LargeurFond = new ParamDefinition('LargeurFond', ParamDomainValue.POS_NULL, rLargeurFond);
-                this._Fruit = new ParamDefinition('Fruit', ParamDomainValue.POS_NULL, rFruit);
+                this._LargeurFond = new ParamDefinition(ComputeNodeType.SectionTrapeze, 'LargeurFond', ParamDomainValue.POS_NULL, rLargeurFond);
+                this._Fruit = new ParamDefinition(ComputeNodeType.SectionTrapeze, 'Fruit', ParamDomainValue.POS_NULL, rFruit);
         }
 
         /**
diff --git a/src/section/section_type.ts b/src/section/section_type.ts
index 7c0ac54b..bb0595d0 100644
--- a/src/section/section_type.ts
+++ b/src/section/section_type.ts
@@ -1,6 +1,6 @@
 import { XOR } from "../base";
 import { cLog } from "./log";
-import { ComputeNode, ParamDefinition, ParamDomain, ParamDomainValue, ParamCalculability, IParamsEquation } from "../param";
+import { ComputeNodeType, ComputeNode, ParamDefinition, ParamDomainValue, ParamCalculability, IParamsEquation } from "../param";
 import { cHautCritique, cHautNormale, cHautCorrespondante, cHautConjuguee } from "./hauteur";
 
 /**
@@ -20,18 +20,18 @@ export abstract class cParamsCanal implements IParamsEquation {
         private _Long: ParamDefinition;  // Longueur du bief
         // public Resolution; /// Méthode de résolution "Euler" ou "RK4"
 
-        constructor(rKs: number, rQ: number, rIf: number, rPrec: number, rYB: number, rYCL: number = undefined, rDx: number = undefined, rLong: number = undefined) //, sResolution = '') {
+        constructor(nodeType: ComputeNodeType, rKs: number, rQ: number, rIf: number, rPrec: number, rYB: number, rYCL: number = undefined, rDx: number = undefined, rLong: number = undefined) //, sResolution = '') {
         {
                 //this.prms.Resolution = sResolution;
-                this._Ks = new ParamDefinition('Ks', ParamDomainValue.POS, rKs);
-                this._Q = new ParamDefinition('Q', ParamDomainValue.POS_NULL, rQ);
-                this._If = new ParamDefinition('If', ParamDomainValue.ANY, rIf);
-                this._Prec = new ParamDefinition('Prec', ParamDomainValue.POS, rPrec);
-                this._iPrec = new ParamDefinition('iPrec', ParamDomainValue.ANY, -Math.log(rPrec) / Math.log(10));
-                this._YB = new ParamDefinition('YB', ParamDomainValue.POS, rYB);
-                this._YCL = new ParamDefinition('YCL', ParamDomainValue.POS_NULL, rYCL);
-                this._Dx = new ParamDefinition('Dx', ParamDomainValue.NOT_NULL, rDx);
-                this._Long = new ParamDefinition('Long', ParamDomainValue.POS, rLong);
+                this._Ks = new ParamDefinition(nodeType, 'Ks', ParamDomainValue.POS, rKs);
+                this._Q = new ParamDefinition(nodeType, 'Q', ParamDomainValue.POS_NULL, rQ);
+                this._If = new ParamDefinition(nodeType, 'If', ParamDomainValue.ANY, rIf);
+                this._Prec = new ParamDefinition(nodeType, 'Prec', ParamDomainValue.POS, rPrec);
+                this._iPrec = new ParamDefinition(nodeType, 'iPrec', ParamDomainValue.ANY, -Math.log(rPrec) / Math.log(10));
+                this._YB = new ParamDefinition(nodeType, 'YB', ParamDomainValue.POS, rYB);
+                this._YCL = new ParamDefinition(nodeType, 'YCL', ParamDomainValue.POS_NULL, rYCL);
+                this._Dx = new ParamDefinition(nodeType, 'Dx', ParamDomainValue.NOT_NULL, rDx);
+                this._Long = new ParamDefinition(nodeType, 'Long', ParamDomainValue.POS, rLong);
         }
 
         /**
@@ -104,10 +104,9 @@ export abstract class ParamsSection extends cParamsCanal {
         private _LargeurBerge: ParamDefinition; // largeur au débordement
 
         constructor(rY: number, rLargeurBerge: number, rKs: number, rQ: number, rIf: number, rPrec: number, rYB: number, rYCL: number = undefined, rDx: number = undefined, rLong: number = undefined) {
-                super(rKs, rQ, rIf, rPrec, rYB, rYCL, rDx, rLong);
-
-                this._Y = new ParamDefinition('Y', ParamDomainValue.POS_NULL, rY);
-                this._LargeurBerge = new ParamDefinition('LargeurBerge', ParamDomainValue.POS_NULL, rLargeurBerge);
+                super(ComputeNodeType.SectionParametree, rKs, rQ, rIf, rPrec, rYB, rYCL, rDx, rLong);
+                this._Y = new ParamDefinition(ComputeNodeType.SectionParametree, 'Y', ParamDomainValue.POS_NULL, rY);
+                this._LargeurBerge = new ParamDefinition(ComputeNodeType.SectionParametree, 'LargeurBerge', ParamDomainValue.POS_NULL, rLargeurBerge);
         }
 
         /**
diff --git a/tsconfig.json b/tsconfig.json
index f91d40af..e5b05034 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -4,6 +4,9 @@
     "module": "commonjs",
     "outDir": "./build",
     "noImplicitAny": true,
+    "removeComments": true,
+    "noImplicitReturns": true,
+    "alwaysStrict": true,
     "sourceMap": true
   },
   "exclude": [
-- 
GitLab