From 6fb6e01c4d576371f1b6f7b0ed212032ce4041af Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Wed, 13 Jun 2018 16:26:56 +0200
Subject: [PATCH] =?UTF-8?q?=20#45=20d=C3=A9placement=20vers=20BaseParam=20?=
 =?UTF-8?q?depuis=20ngHyd=20(NgParameter)=20des=20m=C3=A9thodes=20de=20val?=
 =?UTF-8?q?idation=20des=20valeurs=20(checkMin,=20checkMax,=20isMinMaxVali?=
 =?UTF-8?q?d,=20checkStep,=20isValueValid,=20isRangeValid,=20isValid)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/param/param-base.ts | 101 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 101 insertions(+)

diff --git a/src/param/param-base.ts b/src/param/param-base.ts
index 9778896b..027b62cd 100644
--- a/src/param/param-base.ts
+++ b/src/param/param-base.ts
@@ -145,6 +145,107 @@ export class BaseParam extends JalhydObject implements IObjectReference, Iterabl
         }
     }
 
+    /**
+     * vérifie si un min/max est valide par rapport au domaine de définition
+     */
+    private isMinMaxDomainValid(v: number): boolean {
+        if (v == undefined)
+            return false;
+
+        if (this._paramValues.valueMode == ParamValueMode.MINMAX)
+            try {
+                this.checkValue(v);
+            }
+            catch (e) {
+                return false;
+            }
+
+        return true;
+    }
+
+    public checkMin(min: number): boolean {
+        return this.isMinMaxDomainValid(min) && (min < this._paramValues.max);
+    }
+
+    public checkMax(max: number): boolean {
+        return this.isMinMaxDomainValid(max) && (this._paramValues.min < max);
+    }
+
+    private checkMinMax(min: number, max: number): boolean {
+        return this.isMinMaxDomainValid(min) && this.isMinMaxDomainValid(max) && (min < max);
+    }
+
+    public get isMinMaxValid(): boolean {
+        return this.checkMinMax(this._paramValues.min, this._paramValues.max);
+    }
+
+    public checkStep(step: number): boolean {
+        return this.isMinMaxValid && this._paramValues.stepRefValue.intervalHasValue(step);
+    }
+
+    public get isValueValid(): boolean {
+        try {
+            const v = this.getValue();
+            this.checkValue(v);
+            return true;
+        }
+        catch (e) {
+            return false;
+        }
+    }
+
+    private get isListValid(): boolean {
+        if (this._paramValues.valueList == undefined)
+            return false;
+
+        for (let v of this._paramValues.valueList)
+            try {
+                this.checkValue(v);
+            }
+            catch (e) {
+                return false;
+            }
+        return true;
+    }
+
+    public get isRangeValid(): boolean {
+        switch (this._paramValues.valueMode) {
+            case ParamValueMode.LISTE:
+                return this.isListValid;
+
+            case ParamValueMode.MINMAX:
+                return this.checkStep(this._paramValues.step);
+        }
+
+        throw new Error(`"BaseParam.isRangeValid() : valeur ${ParamValueMode[this._paramValues.valueMode]} de ParamValueMode non prise en compte`);
+    }
+
+    public get isValid() {
+        switch (this._paramValues.valueMode) {
+            case ParamValueMode.SINGLE:
+                return this.isValueValid;
+
+            case ParamValueMode.MINMAX:
+            case ParamValueMode.LISTE:
+                return this.isRangeValid;
+
+            case ParamValueMode.CALCUL:
+                return true;
+
+            case ParamValueMode.LINK:
+                try {
+                    for (const v of this.valuesIterator)
+                        this.checkValue(v);
+                    return true
+                }
+                catch (e) {
+                    return false;
+                }
+        }
+
+        throw new Error(`"BaseParam.isValid() : valeur de ParamValueMode '${ParamValueMode[this._paramValues.valueMode]}' non prise en charge`);
+    }
+
     public get valueMode() {
         return this._paramValues.valueMode;
     }
-- 
GitLab