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