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