package railo.transformer.cfml.evaluator;
import railo.runtime.config.Config;
import railo.runtime.exp.TemplateException;
import railo.transformer.bytecode.statement.tag.Tag;
import railo.transformer.cfml.Data;
import railo.transformer.library.function.FunctionLib;
import railo.transformer.library.tag.TagLib;
import railo.transformer.library.tag.TagLibTag;
/**
* Jede Klasse die als Evaluator verwendet werden soll,
* muss das Interface Evaluator implementieren.
* Das Interface Evaluator definiert also die gemeinsame
* Schnittstelle fuer alle Evaluatoren.
*/
public interface Evaluator {
/**
* Die Methode evaluate wird aufgerufen, wenn der Context eines Tags geprueft werden soll.
* @param config
* @param cfxdTag Das konkrete Tag innerhalb der kompletten CFXD.
* @param libTag Die Definition des Tag aus der TLD.
* @param flibs Saemtliche Function Library Deskriptoren des aktuellen Tag Libray Deskriptors.
* @param cfml
* @return changed talib
* @throws TemplateException
*/
public TagLib execute(Config config,Tag tag, TagLibTag libTag, FunctionLib[] flibs,Data data) throws TemplateException;
/**
* Die Methode evaluate wird aufgerufen, wenn der Context eines Tags geprueft werden soll,
* nachdem die komplette Seite uebersetzt wurde.
* @param cfxdTag Das konkrete Tag innerhalb der kompletten CFXD.
* @param libTag Die Definition des Tag aus der TLD.
* @param flibs Saemtliche Function Library Deskriptoren des aktuellen Tag Libray Deskriptors.
* @throws EvaluatorException
*/
public void evaluate(Tag tag, TagLibTag libTag, FunctionLib[] flibs) throws EvaluatorException;
}