Package railo.transformer.cfml.evaluator.impl

Source Code of railo.transformer.cfml.evaluator.impl.Output

package railo.transformer.cfml.evaluator.impl;

import railo.transformer.bytecode.Statement;
import railo.transformer.bytecode.statement.tag.Tag;
import railo.transformer.bytecode.statement.tag.TagOutput;
import railo.transformer.cfml.evaluator.EvaluatorException;
import railo.transformer.cfml.evaluator.EvaluatorSupport;
import railo.transformer.library.tag.TagLibTag;


/**
* Prueft den Kontext des Tag output.
* Das Tag output darf nicht innerhalb eines output Tag verschachtelt sein,
* ausser das aeussere Tag besitzt ein group Attribute. Das innere Tag darf jedoch kein group Attribute besitzen.

*/
public final class Output extends EvaluatorSupport {

  /**
   * @see railo.transformer.cfml.evaluator.EvaluatorSupport#evaluate(org.w3c.dom.Element, railo.transformer.library.tag.TagLibTag)
   */
  public void evaluate(Tag tag,TagLibTag libTag) throws EvaluatorException {
   
    TagOutput output=(TagOutput) tag;
   
        // check if inside a query tag
    TagOutput parent = output;
        boolean hasParentWithGroup=false;
        boolean hasParentWithQuery=false;
    boolean hasQuery=tag.containsAttribute("query");
   
    while((parent=getParentTagOutput(parent))!=null) {
            if(!hasParentWithQuery)hasParentWithQuery=parent.hasQuery();
            if(!hasParentWithGroup)hasParentWithGroup=parent.hasGroup();
            if(hasParentWithQuery && hasParentWithGroup)break;
    }
       
        if(hasQuery && hasParentWithQuery)
      throw new EvaluatorException("Nesting of tags cfoutput with attribute query is not allowed");

        if(hasQuery)
          output.setType(TagOutput.TYPE_QUERY);
       
        else if(tag.containsAttribute("group") && hasParentWithQuery)
          output.setType(TagOutput.TYPE_GROUP);
       
        else if(hasParentWithQuery) {
          if(hasParentWithGroup) output.setType(TagOutput.TYPE_INNER_GROUP);
          else output.setType(TagOutput.TYPE_INNER_QUERY);
        }
        else
           output.setType(TagOutput.TYPE_NORMAL);
       
       
       
        // attribute maxrows and endrow not allowd at the same time
        if(tag.containsAttribute("maxrows") && tag.containsAttribute("endrow"))
          throw new EvaluatorException("Wrong Context, you cannot use attribute maxrows and endrow at the same time.");
       
       
  }
 
  public static TagOutput getParentTagOutput(TagOutput stat) {
    Statement parent = stat;
   
   
    while(true)  {
      parent=parent.getParent();
      if(parent==null)return null;
      if(parent instanceof TagOutputreturn (TagOutput) parent;
    }
  }
}



TOP

Related Classes of railo.transformer.cfml.evaluator.impl.Output

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.