All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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