org.richfaces.cdk.templatecompiler.el.node.AbstractTreeNode Maven / Gradle / Ivy
The newest version!
/**
* License Agreement.
*
* Rich Faces - Natural Ajax for Java Server Faces (JSF)
*
* Copyright (C) 2007 Exadel, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package org.richfaces.cdk.templatecompiler.el.node;
import org.jboss.el.parser.Node;
import org.richfaces.cdk.templatecompiler.el.ELVisitor;
import org.richfaces.cdk.templatecompiler.el.ParsingException;
import org.richfaces.cdk.templatecompiler.el.types.TypesFactory;
/**
* This abstract class implement some methods of ITreeNode interface to using in subclasses.
*
* @author amarkhel
*
*/
public abstract class AbstractTreeNode implements ITreeNode {
private Node node;
public AbstractTreeNode(Node node) {
this.node = node;
}
/**
* Collects output from visiting child of the current node with the specified index and returns collected string.
*
* @param childIndex
*
* @param visitor
* @return
* @throws ParsingException
*/
protected String getChildOutput(int childIndex, ELVisitor visitor) throws ParsingException {
StringBuilder sb = new StringBuilder();
getChild(childIndex, visitor).visit(sb, visitor);
return sb.toString();
}
protected String coerceToBoolean(String value, ELVisitor visitor) {
return visitor.coerceToType(value, TypesFactory.BOOLEAN_TYPE);
}
/**
* Return node of current wrapper.
*
* @return instance of org.jboss.el.parser.Node
*
*/
public Node getNode() {
return node;
}
/**
* Visit current node. Generate Java code, that represent current node.
*
* @param index - index of child.
* @param visitor - ELVisitor
*
*
* @throws ParsingException - if error occurred during parsing process.
* @return instance of org.jboss.el.parser.Node
*
*/
public ITreeNode getChild(int index, ELVisitor visitor) throws ParsingException {
Node childNode = getNode().jjtGetChild(index);
if (null != childNode) {
ITreeNode treeNode = visitor.determineNodeType(childNode);
return treeNode;
} else {
throw new ParsingException("Child node not found of node " + node.getImage());
}
}
/**
* Returns count of children for this node
*
* @return children count
*/
public int getChildrenCount() {
return getNode().jjtGetNumChildren();
}
/**
* Visit current node.
*
* @param sb instance to collect information.
* @param visitor - ELVisitor
* @throws ParsingException - if error occurred(child not found).
*
*
*/
public abstract void visit(StringBuilder sb, ELVisitor visitor) throws ParsingException;
}