From b7b9bb7e2f4a516216508168456d35571f61c845 Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Mon, 19 Feb 2018 17:31:21 +0100 Subject: [PATCH] =?UTF-8?q?=20#27=20:=20d=C3=A9placement=20des=20it=C3=A9r?= =?UTF-8?q?ateurs=20de=20formulaire=20dans=20le=20fichier=20formulaire-ite?= =?UTF-8?q?rator.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/formulaire/formulaire-definition.ts | 113 +------------------- src/app/formulaire/formulaire-iterator.ts | 112 +++++++++++++++++++ 2 files changed, 114 insertions(+), 111 deletions(-) create mode 100644 src/app/formulaire/formulaire-iterator.ts diff --git a/src/app/formulaire/formulaire-definition.ts b/src/app/formulaire/formulaire-definition.ts index 14b55b6d3..8b621d169 100644 --- a/src/app/formulaire/formulaire-definition.ts +++ b/src/app/formulaire/formulaire-definition.ts @@ -26,118 +26,9 @@ import { SectionResults } from "../results/section-results"; import { RemousResults } from "../results/remous-results"; import { StringMap } from "../stringmap"; import { Observable, Observer, IObservable } from "../services/observer"; +import { TopFormulaireElementIterator, DeepFormulaireElementIterator, TopFieldsetIterator, DeepFieldsetIterator } from "./formulaire-iterator"; -/** - * itérateur qui parcourt un arbre de FormulaireElement - */ -class AbstractFormulaireElementIterator<T extends FormulaireElement> { - private _array: T[] = []; - - private _index: number = 0; - - constructor(fes: FormulaireElement[]) { - this.flatten(fes, this._array); - } - - private flatten(input: FormulaireElement[], out: FormulaireElement[]) { - for (let fe of input) { - if (this.isIterable(fe)) - out.push(fe); - if (this.isDeepIterator()) - this.flatten(fe.kids, out); - } - } - - protected isIterable(fe: FormulaireElement): boolean { - return true; - } - - protected isDeepIterator(): boolean { - return true; - } - - public next(): IteratorResult<T> { - const i = this._index; - if (this._index < this._array.length) { - this._index = i + 1; - return { - done: false, - value: this._array[i] - }; - } else { - return { - done: true, - value: undefined - }; - } - } -} - -/** - * itérateur qui extrait les FormulaireElement de 1er niveau dans un tableau de FormulaireElement - * (qui peut contenir des FieldsetContainer) - */ -class TopFormulaireElementIterator extends AbstractFormulaireElementIterator<FormulaireElement> implements IterableIterator<FormulaireElement> { - protected isDeepIterator(): boolean { - return false; - } - - // interface IterableIterator - - [Symbol.iterator](): IterableIterator<FormulaireElement> { - return this; - } -} - -/** - * itérateur qui extrait récursivement les FormulaireElement dans un tableau de FormulaireElement - * (qui peut contenir des FieldsetContainer) - */ -class DeepFormulaireElementIterator extends AbstractFormulaireElementIterator<FormulaireElement> implements IterableIterator<FormulaireElement> { - // interface IterableIterator - - [Symbol.iterator](): IterableIterator<FormulaireElement> { - return this; - } -} - -/** - * itérateur qui extrait les FieldSet de 1er niveau dans un tableau de FormulaireElement - * (qui peut contenir des FieldsetContainer) - */ -class TopFieldsetIterator extends AbstractFormulaireElementIterator<FieldSet> implements IterableIterator<FieldSet> { - protected isIterable(fe: FormulaireElement): boolean { - return fe instanceof FieldSet; - } - - protected isDeepIterator(): boolean { - return false; - } - - // interface IterableIterator - - [Symbol.iterator](): IterableIterator<FieldSet> { - return this; - } -} - -/** - * itérateur qui extrait récursivement les FieldSet dans un tableau de FormulaireElement - * (qui peut contenir des FieldsetContainer) - */ -class DeepFieldsetIterator extends AbstractFormulaireElementIterator<FieldSet> implements IterableIterator<FieldSet> { - protected isIterable(fe: FormulaireElement) { - return fe instanceof FieldSet; - } - - // interface IterableIterator - - [Symbol.iterator](): IterableIterator<FieldSet> { - return this; - } -} - -export class FormulaireDefinition extends Observable implements Observer { //, Iterable<FieldSet> { +export class FormulaireDefinition extends Observable implements Observer { /** * objet JSON chargé depuis le fichier de configuration de la calculette */ diff --git a/src/app/formulaire/formulaire-iterator.ts b/src/app/formulaire/formulaire-iterator.ts new file mode 100644 index 000000000..005448ed9 --- /dev/null +++ b/src/app/formulaire/formulaire-iterator.ts @@ -0,0 +1,112 @@ +import { FormulaireElement } from "./formulaire-element"; +import { FieldSet } from "./fieldset"; + +/** + * itérateur qui parcourt un arbre de FormulaireElement + */ +class AbstractFormulaireElementIterator<T extends FormulaireElement> { + private _array: T[] = []; + + private _index: number = 0; + + constructor(fes: FormulaireElement[]) { + this.flatten(fes, this._array); + } + + private flatten(input: FormulaireElement[], out: FormulaireElement[]) { + for (let fe of input) { + if (this.isIterable(fe)) + out.push(fe); + if (this.isDeepIterator()) + this.flatten(fe.kids, out); + } + } + + protected isIterable(fe: FormulaireElement): boolean { + return true; + } + + protected isDeepIterator(): boolean { + return true; + } + + public next(): IteratorResult<T> { + const i = this._index; + if (this._index < this._array.length) { + this._index = i + 1; + return { + done: false, + value: this._array[i] + }; + } else { + return { + done: true, + value: undefined + }; + } + } +} + +/** + * itérateur qui extrait les FormulaireElement de 1er niveau dans un tableau de FormulaireElement + * (qui peut contenir des FieldsetContainer) + */ +export class TopFormulaireElementIterator extends AbstractFormulaireElementIterator<FormulaireElement> implements IterableIterator<FormulaireElement> { + protected isDeepIterator(): boolean { + return false; + } + + // interface IterableIterator + + [Symbol.iterator](): IterableIterator<FormulaireElement> { + return this; + } +} + +/** + * itérateur qui extrait récursivement les FormulaireElement dans un tableau de FormulaireElement + * (qui peut contenir des FieldsetContainer) + */ +export class DeepFormulaireElementIterator extends AbstractFormulaireElementIterator<FormulaireElement> implements IterableIterator<FormulaireElement> { + // interface IterableIterator + + [Symbol.iterator](): IterableIterator<FormulaireElement> { + return this; + } +} + +/** + * itérateur qui extrait les FieldSet de 1er niveau dans un tableau de FormulaireElement + * (qui peut contenir des FieldsetContainer) + */ +export class TopFieldsetIterator extends AbstractFormulaireElementIterator<FieldSet> implements IterableIterator<FieldSet> { + protected isIterable(fe: FormulaireElement): boolean { + return fe instanceof FieldSet; + } + + protected isDeepIterator(): boolean { + return false; + } + + // interface IterableIterator + + [Symbol.iterator](): IterableIterator<FieldSet> { + return this; + } +} + +/** + * itérateur qui extrait récursivement les FieldSet dans un tableau de FormulaireElement + * (qui peut contenir des FieldsetContainer) + */ +export class DeepFieldsetIterator extends AbstractFormulaireElementIterator<FieldSet> implements IterableIterator<FieldSet> { + protected isIterable(fe: FormulaireElement) { + return fe instanceof FieldSet; + } + + // interface IterableIterator + + [Symbol.iterator](): IterableIterator<FieldSet> { + return this; + } +} -- GitLab