diff --git a/src/param/param-base.ts b/src/param/param-base.ts index 9778896bc44f46246964e6748dbe976c6114591a..027b62cdc0c0f90ce5235d3c5d1533bd2c18056c 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; }