* @param varnameSet set with all _var names
*/
public void addBinding(String path, Binding binding, Set varnameSet) {
final List nodeids = DataBinder.parseExpression(path, ".");
if (nodeids.size() <= 0) {
throw new UiException("Incorrect bean expression: "+path);
}
boolean var = varnameSet.contains(nodeids.get(0));
BindingNode currentNode = this;
for(final Iterator it = nodeids.iterator(); it.hasNext();) {
final String nodeid = (String) it.next();
if (nodeid == null) {
throw new UiException("Incorrect bean expression: "+path);
}
BindingNode kidNode = (BindingNode) currentNode.getKidNode(nodeid);
if (kidNode == null) { //if not found, then add one
if ("/".equals(currentNode._path)) {
kidNode = new BindingNode(nodeid, var, nodeid, true);
} else {
kidNode = new BindingNode(currentNode._path + "." + nodeid, var, nodeid, false);
}
currentNode.addKidNode(nodeid, kidNode);
} else {
var = var || kidNode._var;
}
currentNode = kidNode;
}
if (currentNode == this) {
throw new UiException("Incorrect bean expression: "+path);
}
currentNode.addBinding(binding);
if ("_var".equals(binding.getAttr())) {
currentNode._innerCollectionNode = DataBinder.hasTemplateOwner(binding.getComponent());
}