From cc002bc9c821defca28c1b99726f074455ba17b3 Mon Sep 17 00:00:00 2001
From: "francois.grand" <francois.grand@irstea.fr>
Date: Wed, 7 Feb 2018 16:57:47 +0100
Subject: [PATCH] =?UTF-8?q?ticket=20#36=20:=20extraction=20d'une=20classe?=
 =?UTF-8?q?=20abstraite=20BaseResult=20=C3=A0=20partir=20de=20Result=20et?=
 =?UTF-8?q?=20CalcResult?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/util/result.ts | 137 +++++++++++++++++++++++++--------------------
 1 file changed, 75 insertions(+), 62 deletions(-)

diff --git a/src/util/result.ts b/src/util/result.ts
index ce641349..e8cda9dd 100644
--- a/src/util/result.ts
+++ b/src/util/result.ts
@@ -1,38 +1,92 @@
 import { cLog } from "./log";
 import { Message, MessageCode, MessageSeverity } from "./message";
 
+export abstract class BaseResult {
+    /**
+     * Messages (erreurs, infos, ...)
+     */
+    private _log: cLog;
+
+    constructor() {
+        this._log = new cLog();
+    }
+
+    public get log() {
+        return this._log;
+    }
+
+    /**
+     * ajoute un message au journal
+     */
+    public addMessage(m: Message) {
+        this._log.add(m);
+    }
+
+    /**
+     * ajoute tous les messages d'un journal au journal
+     */
+    public addLog(l: cLog) {
+        this._log.addLog(l);
+    }
+
+    /**
+     * insert un message en début de liste
+     */
+    public insertMessage(m: Message) {
+        this._log.insert(m);
+    }
+
+    /**
+     * @returns true si 
+     */
+    public get ok(): boolean {
+        return this.resultsOk && !this.hasErrorMessages;
+    }
+
+    /**
+     * @returns true si tous les résultats (y compris les) sont
+     */
+    public abstract get resultsOk(): boolean;
+
+    /**
+     * @returns true si au moins un message de log comporte un code d'erreur
+     */
+    public abstract get hasErrorMessages(): boolean;
+
+    /**
+     * @param name nom du résultat complémentaire à retourner
+     * @returns un résultat complémentaire par son nom
+     */
+    public abstract getExtraResult(name: string): any;
+}
+
 /**
  * Résultat de calcul comprenant la valeur du résultat et des calculs annexes (flag, calculs intermédiaires...)
  * Représente une valeur unique
  */
-export class Result {
+export class Result extends BaseResult {
     /**
      * Valeur calculée
      */
     private _vCalc: number;
 
-    /**
-     * Messages (erreurs, infos, ...)
-     */
-    private _log: cLog;
-
     /**
      * résultats complémentaires
      */
     private _extraResults: { [key: string]: any };
 
     constructor(v: number | Message, d: {} = undefined) {
-        this._log = new cLog();
+        super();
         if (typeof v == "number") {
             this._vCalc = v;
             const m = new Message(MessageCode.ERROR_OK);
             m.extraVar = d;
-            this._log.add(m);
+            this.addMessage(m);
         }
         else if (v instanceof Message) {
             if (d != undefined)
                 throw new Error("appel à Result.constructor() invalide");
-            this._log.add(v);
+            this.addMessage(v);
         }
         this._extraResults = {};
     };
@@ -42,32 +96,17 @@ export class Result {
     get code(): MessageCode {
         if (this.messageCount != 1)
             throw new Error("appel à Result.code invalide, il n'y pas exactement un message de log");
-        return this._log.messages[0].code;
+        return this.log.messages[0].code;
     }
 
     get extraVar() {
         if (this.messageCount != 1)
             throw new Error("appel à Result.extraVar invalide, il n'y pas exactement un message de log");
-        return this._log.messages[0].extraVar;
-    }
-
-    public addMessage(m: Message) {
-        this._log.add(m);
-    }
-
-    /**
-     * insert un message en début de liste
-     */
-    public insertMessage(m: Message) {
-        this._log.insert(m);
-    }
-
-    public get log(): cLog {
-        return this._log;
+        return this.log.messages[0].extraVar;
     }
 
     private get messageCount(): number {
-        return this._log.messages.length;
+        return this.log.messages.length;
     }
 
     private get hasExtraResults(): boolean {
@@ -79,16 +118,12 @@ export class Result {
     }
 
     public get hasErrorMessages(): boolean {
-        for (let m of this._log.messages)
+        for (let m of this.log.messages)
             if (m.code != MessageCode.ERROR_OK && m.getSeverity() == MessageSeverity.ERROR)
                 return true;
         return false;
     }
 
-    public get ok(): boolean {
-        return this.resultsOk && !this.hasErrorMessages;
-    }
-
     /**
      * résultats complémentaires
      */
@@ -119,13 +154,11 @@ export class Result {
  * Résultat global d'un calcul
  * Peut comporter un ou plusieurs Result.
  */
-export class CalcResult {
-    private _globalLog: cLog;
-
+export class CalcResult extends BaseResult {
     private _results: Result[];
 
     constructor() {
-        this._globalLog = new cLog();
+        super();
         this._results = [];
     }
 
@@ -140,6 +173,10 @@ export class CalcResult {
         this._results.push(r);
     }
 
+    /**
+     * @param name nom du résultat complémentaire
+     * @returns le nombre la taille d'un résultat complémentaire
+     */
     public extraResultLength(name: string): number {
         const r = this.getExtraResult(name);
         if (r == undefined)
@@ -167,24 +204,8 @@ export class CalcResult {
         }
     }
 
-    public get log() {
-        return this._globalLog;
-    }
-
-    public addMessage(m: Message) {
-        this._globalLog.add(m);
-    }
-
-    public addLog(l: cLog) {
-        this._globalLog.addLog(l);
-    }
-
-    public get vCalc() {
-        return this.result.vCalc;
-    }
-
     public get resultsOk(): boolean {
-        if (this._results.length == 0 && this._globalLog.messages.length == 0)
+        if (this._results.length == 0 && this.log.messages.length == 0)
             return false;
         for (let r of this._results)
             if (!r.resultsOk)
@@ -193,7 +214,7 @@ export class CalcResult {
     }
 
     public get hasErrorMessages(): boolean {
-        for (let m of this._globalLog.messages)
+        for (let m of this.log.messages)
             if (m.getSeverity() == MessageSeverity.ERROR)
                 return true;
 
@@ -203,12 +224,4 @@ export class CalcResult {
 
         return false;
     }
-
-    public get ok(): boolean {
-        return this.resultsOk && !this.hasErrorMessages;
-    }
-
-    public get code(): MessageCode {
-        return this.result.code;
-    }
 }
-- 
GitLab