From c7ad02fc8fcdea7f7e93e15616da41eb5b82a614 Mon Sep 17 00:00:00 2001 From: Nicolas Feybesse Date: Fri, 26 Aug 2016 14:49:10 +0200 Subject: [PATCH] Refactor ViewContext, remove computeIndex --- .../genericsystem/reactor/ViewContext.java | 61 +++++++++---------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/ViewContext.java b/gs-reactor/src/main/java/org/genericsystem/reactor/ViewContext.java index 0770447d2..27e9dfe69 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/ViewContext.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/ViewContext.java @@ -1,7 +1,5 @@ package org.genericsystem.reactor; -import io.vertx.core.http.ServerWebSocket; - import java.util.HashMap; import java.util.IdentityHashMap; import java.util.Map; @@ -10,6 +8,8 @@ import org.genericsystem.defaults.tools.TransformationObservableList; import org.genericsystem.reactor.Tag.RootTag; +import io.vertx.core.http.ServerWebSocket; + /** * @author Nicolas Feybesse * @@ -18,7 +18,7 @@ public class ViewContext { private ViewContext parent; - private Tag element; + private Tag tag; protected HtmlDomNode node; private Model modelContext; @@ -30,33 +30,47 @@ private ViewContext(int indexInChildren, ViewContext parent, Model modelConte init(indexInChildren); } - protected void init(ViewContext parent, Model modelContext, Tag element, HtmlDomNode node) { + protected void init(ViewContext parent, Model modelContext, Tag tag, HtmlDomNode node) { this.parent = parent; - this.element = element; + this.tag = tag; assert node != null; this.node = node; node.viewContext = this; this.modelContext = modelContext; } - protected void init(int indexInChildren) { + // private int computeIndex(Integer nullable, Tag childElement) { + // int indexInChildren = nullable == null ? sizeBySubElement.get(childElement) : nullable; + // for (Tag child : tag.getObservableChildren()) { + // if (child == childElement) + // return indexInChildren; + // indexInChildren += sizeBySubElement.get(child); + // } + // return indexInChildren; + // } + + protected void init(int index) { modelContext.register(this); if (parent != null) - insertChild(indexInChildren); - for (BiConsumer binding : element.getPreFixedBindings()) + insertChild(index); + for (BiConsumer binding : tag.getPreFixedBindings()) binding.accept(modelContext, getNode()); - for (Tag childTag : element.getObservableChildren()) { + + int i = index; + for (Tag childTag : tag.getObservableChildren()) { MetaBinding metaBinding = childTag. getMetaBinding(); if (metaBinding != null) { - modelContext.setSubContexts(childTag, new TransformationObservableList(metaBinding.buildBetweenChildren(modelContext), (index, between) -> { + final int i_ = i; + modelContext.setSubContexts(childTag, new TransformationObservableList(metaBinding.buildBetweenChildren(modelContext), (ind, between) -> { Model childModel = metaBinding.buildModel(modelContext, between); - createViewContextChild(index, childModel, childTag); + new ViewContext(i_ + ind, this, childModel, childTag); return childModel; }, Model::destroy)); } else - createViewContextChild(null, modelContext, childTag); + new ViewContext(i, this, modelContext, childTag); + i += sizeBySubElement.get(childTag); } - for (BiConsumer binding : element.getPostFixedBindings()) + for (BiConsumer binding : tag.getPostFixedBindings()) binding.accept(modelContext, getNode()); } @@ -65,11 +79,6 @@ public MODEL getModelContext() { return (MODEL) modelContext; } - public void createViewContextChild(Integer index, Model childModelContext, Tag element) { - int indexInChildren = computeIndex(index, element); - new ViewContext(indexInChildren, this, childModelContext, element); - } - protected RootViewContext getRootViewContext() { return parent.getRootViewContext(); } @@ -92,7 +101,7 @@ public Integer get(Object key) { }; void insertChild(int index) { - parent.incrementSize(element); + parent.incrementSize(tag); node.sendAdd(index); getRootViewContext().add(node.getId(), node); } @@ -104,7 +113,7 @@ void destroy() { assert !destroyed : "Node : " + getNode().getId(); destroyed = true; getRootViewContext().remove(node.getId()); - parent.decrementSize(element); + parent.decrementSize(tag); } private void incrementSize(Tag child) { @@ -120,16 +129,6 @@ private void decrementSize(Tag child) { sizeBySubElement.put(child, size); } - private int computeIndex(Integer nullable, Tag childElement) { - int indexInChildren = nullable == null ? sizeBySubElement.get(childElement) : nullable; - for (Tag child : element.getObservableChildren()) { - if (child == childElement) - return indexInChildren; - indexInChildren += sizeBySubElement.get(child); - } - return indexInChildren; - } - public ServerWebSocket getWebSocket() { return parent.getWebSocket(); } @@ -173,6 +172,6 @@ public void remove(String id) { } public Tag getTag() { - return element; + return tag; } } \ No newline at end of file