From 07883379a9e86c14ac4d8acceebb0f9f5f44156c Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Thu, 21 Jun 2018 16:06:54 +0200
Subject: [PATCH] =?UTF-8?q?=20#45=20BaseParam=20impl=C3=A9mente=20IObserva?=
 =?UTF-8?q?ble=20et=20envoie=20une=20notification=20lors=20de=20changement?=
 =?UTF-8?q?s=20de=20valeur?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/param/param-base.ts | 47 +++++++++++++++++++++++++++++++++++++++--
 1 file changed, 45 insertions(+), 2 deletions(-)

diff --git a/src/param/param-base.ts b/src/param/param-base.ts
index 7abc9172..3db95844 100644
--- a/src/param/param-base.ts
+++ b/src/param/param-base.ts
@@ -8,12 +8,13 @@ import { ParamValueMode } from "./param-value-mode";
 import { IReferencedNub, INubReference } from "../value_ref/object_ref";
 import { Result } from "../util/result";
 import { NamedIterableValues } from "./param-value-iterator";
+import { IObservable, Observable, Observer } from "../util/observer";
 
 /**
  * paramètre avec symbole et domaine de définition
  */
 // tslint:disable-next-line:max-classes-per-file
-export class BaseParam extends JalhydObject implements INubReference, NamedIterableValues {
+export class BaseParam extends JalhydObject implements INubReference, NamedIterableValues, IObservable {
     /**
      * symbole
      */
@@ -29,10 +30,17 @@ export class BaseParam extends JalhydObject implements INubReference, NamedItera
      */
     private _paramValues: ParamValues;
 
+    /**
+     * implémentation par délégation de IObservable
+     */
+    private _observable: Observable;
+
     constructor(symb: string, d: ParamDomain | ParamDomainValue, val?: number) {
         super();
         this._symbol = symb;
 
+        this._observable = new Observable()
+
         this._paramValues = new ParamValues();
         this._paramValues.setSingleValue(val);
 
@@ -81,9 +89,21 @@ export class BaseParam extends JalhydObject implements INubReference, NamedItera
         return this._paramValues.currentValue;
     }
 
-    public setValue(val: number) {
+    /**
+     * notification envoyée après la modification de la valeur du paramètre
+     */
+    private notifyValueModified(sender: any) {
+        this.notifyObservers(
+            {
+                "action": "baseparamAfterValue",
+            }, sender
+        );
+    }
+
+    public setValue(val: number, sender?: any) {
         this.checkValue(val);
         this._paramValues.currentValue = val;
+        this.notifyValueModified(sender);
     }
 
     public get uncheckedValue(): number {
@@ -333,4 +353,27 @@ export class BaseParam extends JalhydObject implements INubReference, NamedItera
     public get name(): string {
         return this._symbol;
     }
+
+    // interface IObservable
+
+    /**
+     * ajoute un observateur à la liste
+     */
+    public addObserver(o: Observer) {
+        this._observable.addObserver(o);
+    }
+
+    /**
+     * supprime un observateur de la liste
+     */
+    public removeObserver(o: Observer) {
+        this._observable.removeObserver(o);
+    }
+
+    /**
+     * notifie un événement aux observateurs
+     */
+    notifyObservers(data: any, sender?: any) {
+        this._observable.notifyObservers(data, sender);
+    }
 }
-- 
GitLab