Package railo.transformer.cfml.evaluator

Source Code of railo.transformer.cfml.evaluator.EvaluatorPool

package railo.transformer.cfml.evaluator;

import java.util.Vector;

import railo.runtime.exp.TemplateException;
import railo.transformer.bytecode.statement.tag.Tag;
import railo.transformer.library.function.FunctionLib;
import railo.transformer.library.tag.TagLibTag;
import railo.transformer.util.CFMLString;

/**
*
* Wenn der CFML Transformer waehrend des �bersetzungsprozess auf einen Tag stoesst,
* prueft er mithilfe der passenden TagLib,
* ob dieses Tag eine Evaluator definiert hat.
* Wenn ein Evaluator definiert ist, kann der CFML Transformer diesen aber nicht sofort aufrufen,
* da zuerst das komplette Dokument uebersetzt werden muss,
* bevor ein Evaluator aufgerufen werden kann.
* Hier kommt der EvaluatorPool zum Einsatz,
* der CFMLTransfomer uebergibt den Evaluator den er von der TagLib erhalten hat,
* an den EvaluatorPool weiter.
* Sobald der CFMLTransfomer den �bersetzungsprozess abgeschlossen hat,
* ruft er dann den EvaluatorPool auf und dieser ruft dann alle Evaluatoren auf die im uebergeben wurden.

*/
public final class EvaluatorPool {
 
  Vector v=new Vector();
 
  /**
   * Diese Methode wird aufgerufen um eine neue Methode in den Pool zu spielen.
   * @param libTag  Die Definition des Tag aus der TLD.
   * @param cfxdTag Das konkrete Tag innerhalb der kompletten CFXD.
   * @param flibs Saemtliche Function Library Deskriptoren des aktuellen Tag Libray Deskriptors.
   * @param cfml CFMLString des aktuellen �bersetzungsprozess.
   */
  public void add(TagLibTag libTag,Tag tag, FunctionLib[] flibs, CFMLString cfml) {
    v.add(new EvaluatorData(libTag,tag,flibs,cfml));
  }

  /**
   * Die Methode run wird aufgerufen sobald, der CFML Transformer den �bersetzungsprozess angeschlossen hat.
   * Die metode run rauft darauf alle Evaluatoren auf die intern gespeicher wurden und loescht den internen Speicher.
   * @throws TemplateException
   */
  public void run() throws TemplateException  {
    int size=v.size();
    for(int i=0;i<size;i++) {
      EvaluatorData ec=(EvaluatorData)v.elementAt(i);
      CFMLString cfml=ec.getCfml();
      cfml.setPos(ec.getPos());
      try {
        if(ec.getLibTag().getEvaluator()!=null)ec.getLibTag().getEvaluator().evaluate(
            ec.getTag(),
            ec.getLibTag(),
            ec.getFlibs());
      } catch (EvaluatorException e) {
          v.clear();//print.printST(e);
        throw new TemplateException(cfml,e);
      }catch (Throwable e) {
          v.clear();
        throw new TemplateException(cfml,e);
      }
     
    }
    v.clear();
  }

  /**
   *
   *
   * Die interne Klasse EvaluatorData dient zum Zwischenspeichern aller Daten
   * die benoetigt werden einen einzelnen Evaluator aufzurufen.
   */
  class EvaluatorData {
    TagLibTag libTag;
    Tag tag;
    FunctionLib[] flibs;
    CFMLString cfml;
    int pos;
   
    /**
    * Konstruktor von EvaluatorData.
    * @param libTag  Die Definition des Tag aus der TLD.
     * @param cfxdTag Das konkrete Tag innerhalb der kompletten CFXD.
     * @param flibs Saemtliche Function Library Deskriptoren des aktuellen Tag Libray Deskriptors.
     * @param cfml CFMLString des aktuellen �bersetzungsprozess.
     */
    public EvaluatorData(TagLibTag libTag,Tag tag, FunctionLib[] flibs, CFMLString cfml) {
      this.libTag=libTag;
      this.tag=tag;
      this.flibs=flibs;
      this.cfml=cfml;
      this.pos=cfml.getPos();
    }
   
    /**
     * Gibt den aktuellen CFMLString zurueck.
     * @return CFMLString des aktuellen �bersetzungsprozess.
     */
    public CFMLString getCfml() {
      return cfml;
    }

    /**
     * Gibt den zu verarbeitenden Tag zurueck.
     * @return Das konkrete Tag innerhalb der kompletten CFXD.
     */
    public Tag getTag() {
      return tag;
    }

    /**
     * Gibt saemtliche Function Library Deskriptoren des aktuellen Tag Libray Deskriptors zurueck.
     * @return Saemtliche Function Library Deskriptoren.
     */
    public FunctionLib[] getFlibs() {
      return flibs;
    }

    /**
     * Die Definition des aktuellen tags aus der TLD
     * @return den aktuellen TagLibTag.
     */
    public TagLibTag getLibTag() {
      return libTag;
    }

    /**
     * Die Position des zu verarbeitenden Tag innerhalb der CFML Seite.
     * @return Position des Tag.
     */
    public int getPos() {
      return pos;
    }

  }

    /**
     * clears the ppol
     */
    public void clear() {
        v.clear();
    }

  /*public static void getPool() {
    // TODO Auto-generated method stub
   
  }*/

}
TOP

Related Classes of railo.transformer.cfml.evaluator.EvaluatorPool

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.