001    package railo.transformer.cfml.evaluator;
002    
003    import railo.transformer.bytecode.statement.tag.Tag;
004    import railo.transformer.bytecode.util.ASMUtil;
005    import railo.transformer.library.tag.TagLibTag;
006    
007    
008    /**
009     * checks the if a child tag is inside his parent
010     */
011    public abstract class ChildEvaluator extends EvaluatorSupport {
012    
013    
014            /**
015             * @see railo.transformer.cfml.evaluator.EvaluatorSupport#evaluate(org.w3c.dom.Element, railo.transformer.library.tag.TagLibTag)
016             */
017            public void evaluate(Tag tag,TagLibTag libTag) throws EvaluatorException { 
018            
019            // check parent
020                    String ns=libTag.getTagLib().getNameSpaceAndSeparator();
021                    String name=ns+getParentName();
022                    
023                    if(!ASMUtil.hasAncestorTag(tag,name))
024                            throw new EvaluatorException("Wrong Context, tag "+libTag.getFullName()+" must be inside a "+name+" tag");
025                    
026            }
027    
028            protected abstract String getParentName();
029    
030    }