org.nasdanika.html.knockout.impl.ObservablesGenerator Maven / Gradle / Ivy
package org.nasdanika.html.knockout.impl;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.nasdanika.html.knockout.KnockoutBindingsSource.Binding;
class ObservablesGenerator {
Map children = new LinkedHashMap<>();
List bindings = new ArrayList<>();
private String[] excludes;
private int level;
ObservablesGenerator(String[] excludes) {
this.excludes = excludes;
}
private ObservablesGenerator(int level) {
this(new String[0]);
this.level = level;
}
void addBinding(Binding binding) {
for (String ex: excludes) {
if (ex.equals(binding.getName()) || binding.getName().startsWith(ex+".")) {
return;
}
}
int dotIdx = binding.getName().indexOf(".");
if (dotIdx == -1) {
bindings.add(binding);
} else {
String childName = binding.getName().substring(0, dotIdx);
ObservablesGenerator child = children.get(childName);
if (child == null) {
child = new ObservablesGenerator(level+1);
children.put(childName, child);
}
child.addBinding(new KnockoutBindingImpl(binding.getName().substring(dotIdx+1), binding.isArray(), binding.getInitialValue()));
}
}
void generateObservables(StringBuilder builder) {
if (level == 0) {
for (Binding binding: bindings) {
builder.append("this.").append(binding.getName()).append(" = ");
generateObservable(binding, builder);
builder.append(";").append(System.lineSeparator());
}
for (Entry childEntry: children.entrySet()) {
builder.append("this.").append(childEntry.getKey()).append(" = ");
childEntry.getValue().generateObservables(builder);
builder.append(";").append(System.lineSeparator());
}
} else {
builder.append("{").append(System.lineSeparator());
for (int bi = 0; bi < bindings.size(); ++bi) {
for (int i=0; i> entryList = new ArrayList<>(children.entrySet());
for (int ei = 0; ei < entryList.size(); ++ei) {
for (int i=0; i childEntry = entryList.get(ei);
builder.append(childEntry.getKey()).append(" : ");
childEntry.getValue().generateObservables(builder);
if (ei < entryList.size()-1) {
builder.append(",");
}
builder.append(System.lineSeparator());
}
for (int i=0; i © 2015 - 2025 Weber Informatics LLC | Privacy Policy