From aa5bbc370fefc3c5d6fb3177f8a60e3c922fbe27 Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Thu, 25 Jan 2018 14:40:27 +0100
Subject: [PATCH] observer.ts : ajout de l'interface IObservable

---
 src/app/services/observer.ts | 42 +++++++++++++++++++++++++++++++-----
 1 file changed, 37 insertions(+), 5 deletions(-)

diff --git a/src/app/services/observer.ts b/src/app/services/observer.ts
index b0c8e943f..d80be8110 100644
--- a/src/app/services/observer.ts
+++ b/src/app/services/observer.ts
@@ -1,26 +1,58 @@
 export interface Observer {
-    update(sender: any, data: any): void;
+    update(sender: IObservable, data: any): void;
 }
 
-export class Observable {
+export interface IObservable {
+    /**
+     * ajoute un observateur à la liste
+     */
+    addObserver(o: Observer);
+
+    /**
+     * supprime un observateur de la liste
+     */
+    removeObserver(o: Observer);
+
+    /**
+     * notifie un événement aux observateurs
+     */
+    notifyObservers(data: any);
+}
+
+export class Observable implements IObservable {
     private _observers: Observer[];
 
+    private _sender: IObservable;
+
     constructor() {
         this._observers = [];
+        this._sender = this;
+    }
+
+    public set sender(s: IObservable) {
+        this._sender = s;
     }
 
+    /**
+     * ajoute un observateur à la liste
+     */
     public addObserver(o: Observer) {
         if (!this._observers.includes(o))
             this._observers.push(o);
     }
 
+    /**
+     * supprime un observateur de la liste
+     */
     public removeObserver(o: Observer) {
         this._observers = this._observers.filter(a => a !== o);
     }
 
+    /**
+     * notifie un événement aux observateurs
+     */
     public notifyObservers(data: any) {
-        for (let o of this._observers) {
-            o.update(this, data);
-        }
+        for (let o of this._observers)
+            o.update(this._sender, data);
     }
 }
-- 
GitLab