package railo.runtime.tag; import railo.runtime.cfx.CFXTagException; import railo.runtime.cfx.CFXTagPool; import railo.runtime.cfx.RequestImpl; import railo.runtime.cfx.ResponseImpl; import railo.runtime.exp.PageException; import railo.runtime.ext.tag.AppendixTag; import railo.runtime.ext.tag.DynamicAttributes; import railo.runtime.ext.tag.TagImpl; import railo.runtime.op.Caster; import railo.runtime.type.Collection; import railo.runtime.type.KeyImpl; import railo.runtime.type.Struct; import railo.runtime.type.StructImpl; import com.allaire.cfx.CustomTag; import com.allaire.cfx.Request; import com.allaire.cfx.Response; /** * Creates a CFML CFX Tag * * * **/ public final class CFXTag extends TagImpl implements DynamicAttributes,AppendixTag { private Struct attributes=new StructImpl(); private String appendix; @Override public void release() { attributes.clear(); appendix=null; } @Override public void setAppendix(String appendix) { //print.out(appendix); this.appendix = appendix; } @Override public void setDynamicAttribute(String domain, String key, Object value) { setDynamicAttribute(domain, KeyImpl.init(key), value); } @Override public void setDynamicAttribute(String domain, Collection.Key key, Object value) { attributes.setEL(key,value); } @Override public int doStartTag() throws PageException { // RR SerialNumber sn = pageContext.getConfig().getSerialNumber(); // if(sn.getVersion()==SerialNumber.VERSION_COMMUNITY) // throw new SecurityException("no access to this functionality with the "+sn.getStringVersion()+" version of railo"); CFXTagPool pool=pageContext.getConfig().getCFXTagPool(); CustomTag ct; try { ct = pool.getCustomTag(appendix); } catch (CFXTagException e) { throw Caster.toPageException(e); } Request req=new RequestImpl(pageContext,attributes); Response rsp=new ResponseImpl(pageContext,req.debug()); try { ct.processRequest(req,rsp); } catch (Exception e) { throw Caster.toPageException(e); } pool.releaseCustomTag(ct); return SKIP_BODY; } public String getAppendix() { return appendix; } }