Skip to content

Commit

Permalink
Refactor ViewContext, remove computeIndex
Browse files Browse the repository at this point in the history
  • Loading branch information
nfeybesse committed Aug 26, 2016
1 parent 306b1ad commit c7ad02f
Showing 1 changed file with 30 additions and 31 deletions.
61 changes: 30 additions & 31 deletions gs-reactor/src/main/java/org/genericsystem/reactor/ViewContext.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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
*
Expand All @@ -18,7 +18,7 @@
public class ViewContext<M extends Model> {

private ViewContext<M> parent;
private Tag<M> element;
private Tag<M> tag;
protected HtmlDomNode node;
private Model modelContext;

Expand All @@ -30,33 +30,47 @@ private ViewContext(int indexInChildren, ViewContext<M> parent, Model modelConte
init(indexInChildren);
}

protected void init(ViewContext<M> parent, Model modelContext, Tag<M> element, HtmlDomNode node) {
protected void init(ViewContext<M> parent, Model modelContext, Tag<M> 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 <BETWEEN> 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 <BETWEEN> void init(int index) {
modelContext.register(this);
if (parent != null)
insertChild(indexInChildren);
for (BiConsumer<Model, HtmlDomNode> binding : element.getPreFixedBindings())
insertChild(index);
for (BiConsumer<Model, HtmlDomNode> binding : tag.getPreFixedBindings())
binding.accept(modelContext, getNode());
for (Tag<?> childTag : element.getObservableChildren()) {

int i = index;
for (Tag<?> childTag : tag.getObservableChildren()) {
MetaBinding<BETWEEN> metaBinding = childTag.<BETWEEN> getMetaBinding();
if (metaBinding != null) {
modelContext.setSubContexts(childTag, new TransformationObservableList<BETWEEN, Model>(metaBinding.buildBetweenChildren(modelContext), (index, between) -> {
final int i_ = i;
modelContext.setSubContexts(childTag, new TransformationObservableList<BETWEEN, Model>(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<Model, HtmlDomNode> binding : element.getPostFixedBindings())
for (BiConsumer<Model, HtmlDomNode> binding : tag.getPostFixedBindings())
binding.accept(modelContext, getNode());
}

Expand All @@ -65,11 +79,6 @@ public <MODEL extends Model> 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<M> getRootViewContext() {
return parent.getRootViewContext();
}
Expand All @@ -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);
}
Expand All @@ -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) {
Expand All @@ -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();
}
Expand Down Expand Up @@ -173,6 +172,6 @@ public void remove(String id) {
}

public Tag<M> getTag() {
return element;
return tag;
}
}

0 comments on commit c7ad02f

Please sign in to comment.