Commit cc002bc9 authored by Grand Francois's avatar Grand Francois
Browse files

ticket #36 : extraction d'une classe abstraite BaseResult à partir de Result et CalcResult

Showing with 75 additions and 62 deletions
+75 -62
import { cLog } from "./log"; import { cLog } from "./log";
import { Message, MessageCode, MessageSeverity } from "./message"; 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...) * Résultat de calcul comprenant la valeur du résultat et des calculs annexes (flag, calculs intermédiaires...)
* Représente une valeur unique * Représente une valeur unique
*/ */
export class Result { export class Result extends BaseResult {
/** /**
* Valeur calculée * Valeur calculée
*/ */
private _vCalc: number; private _vCalc: number;
/**
* Messages (erreurs, infos, ...)
*/
private _log: cLog;
/** /**
* résultats complémentaires * résultats complémentaires
*/ */
private _extraResults: { [key: string]: any }; private _extraResults: { [key: string]: any };
constructor(v: number | Message, d: {} = undefined) { constructor(v: number | Message, d: {} = undefined) {
this._log = new cLog(); super();
if (typeof v == "number") { if (typeof v == "number") {
this._vCalc = v; this._vCalc = v;
const m = new Message(MessageCode.ERROR_OK); const m = new Message(MessageCode.ERROR_OK);
m.extraVar = d; m.extraVar = d;
this._log.add(m); this.addMessage(m);
} }
else if (v instanceof Message) { else if (v instanceof Message) {
if (d != undefined) if (d != undefined)
throw new Error("appel à Result.constructor() invalide"); throw new Error("appel à Result.constructor() invalide");
this._log.add(v); this.addMessage(v);
} }
this._extraResults = {}; this._extraResults = {};
}; };
...@@ -42,32 +96,17 @@ export class Result { ...@@ -42,32 +96,17 @@ export class Result {
get code(): MessageCode { get code(): MessageCode {
if (this.messageCount != 1) if (this.messageCount != 1)
throw new Error("appel à Result.code invalide, il n'y pas exactement un message de log"); 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() { get extraVar() {
if (this.messageCount != 1) if (this.messageCount != 1)
throw new Error("appel à Result.extraVar invalide, il n'y pas exactement un message de log"); throw new Error("appel à Result.extraVar invalide, il n'y pas exactement un message de log");
return this._log.messages[0].extraVar; 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;
} }
private get messageCount(): number { private get messageCount(): number {
return this._log.messages.length; return this.log.messages.length;
} }
private get hasExtraResults(): boolean { private get hasExtraResults(): boolean {
...@@ -79,16 +118,12 @@ export class Result { ...@@ -79,16 +118,12 @@ export class Result {
} }
public get hasErrorMessages(): boolean { 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) if (m.code != MessageCode.ERROR_OK && m.getSeverity() == MessageSeverity.ERROR)
return true; return true;
return false; return false;
} }
public get ok(): boolean {
return this.resultsOk && !this.hasErrorMessages;
}
/** /**
* résultats complémentaires * résultats complémentaires
*/ */
...@@ -119,13 +154,11 @@ export class Result { ...@@ -119,13 +154,11 @@ export class Result {
* Résultat global d'un calcul * Résultat global d'un calcul
* Peut comporter un ou plusieurs Result. * Peut comporter un ou plusieurs Result.
*/ */
export class CalcResult { export class CalcResult extends BaseResult {
private _globalLog: cLog;
private _results: Result[]; private _results: Result[];
constructor() { constructor() {
this._globalLog = new cLog(); super();
this._results = []; this._results = [];
} }
...@@ -140,6 +173,10 @@ export class CalcResult { ...@@ -140,6 +173,10 @@ export class CalcResult {
this._results.push(r); 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 { public extraResultLength(name: string): number {
const r = this.getExtraResult(name); const r = this.getExtraResult(name);
if (r == undefined) if (r == undefined)
...@@ -167,24 +204,8 @@ export class CalcResult { ...@@ -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 { 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; return false;
for (let r of this._results) for (let r of this._results)
if (!r.resultsOk) if (!r.resultsOk)
...@@ -193,7 +214,7 @@ export class CalcResult { ...@@ -193,7 +214,7 @@ export class CalcResult {
} }
public get hasErrorMessages(): boolean { public get hasErrorMessages(): boolean {
for (let m of this._globalLog.messages) for (let m of this.log.messages)
if (m.getSeverity() == MessageSeverity.ERROR) if (m.getSeverity() == MessageSeverity.ERROR)
return true; return true;
...@@ -203,12 +224,4 @@ export class CalcResult { ...@@ -203,12 +224,4 @@ export class CalcResult {
return false; return false;
} }
public get ok(): boolean {
return this.resultsOk && !this.hasErrorMessages;
}
public get code(): MessageCode {
return this.result.code;
}
} }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment