001 package railo.runtime.tag; 002 003 import railo.runtime.ext.tag.AppendixTag; 004 import railo.runtime.ext.tag.BodyTagTryCatchFinallyImpl; 005 import railo.runtime.ext.tag.DynamicAttributes; 006 import railo.runtime.type.Collection; 007 import railo.runtime.type.KeyImpl; 008 import railo.runtime.type.Struct; 009 import railo.runtime.type.StructImpl; 010 import railo.runtime.type.scope.Caller; 011 import railo.runtime.type.scope.Scope; 012 013 public abstract class CustomTag extends BodyTagTryCatchFinallyImpl implements DynamicAttributes,AppendixTag { 014 015 016 protected static final Collection.Key ON_ERROR = KeyImpl.intern("onError"); 017 protected static final Collection.Key ON_FINALLY = KeyImpl.intern("onFinally"); 018 protected static final Collection.Key ON_START_TAG = KeyImpl.intern("onStartTag"); 019 protected static final Collection.Key ON_END_TAG = KeyImpl.intern("onEndTag"); 020 protected static final Collection.Key INIT = KeyImpl.intern("init"); 021 protected static final Collection.Key GENERATED_CONTENT=KeyImpl.intern("GENERATEDCONTENT"); 022 023 protected static final Collection.Key EXECUTION_MODE=KeyImpl.intern("EXECUTIONMODE"); 024 protected static final Collection.Key EXECUTE_BODY=KeyImpl.intern("EXECUTEBODY"); 025 protected static final Collection.Key HAS_END_TAG=KeyImpl.intern("HASENDTAG"); 026 027 028 protected static final Collection.Key ATTRIBUTES=KeyImpl.intern("ATTRIBUTES"); 029 protected static final Collection.Key CALLER=KeyImpl.intern("CALLER"); 030 protected static final Collection.Key THIS_TAG=KeyImpl.intern("THISTAG"); 031 032 033 protected StructImpl attributesScope; 034 protected Caller callerScope; 035 036 @Override 037 public void doInitBody() {} 038 039 040 041 @Override 042 public final void setDynamicAttribute(String uri, String name, Object value) { 043 TagUtil.setDynamicAttribute(attributesScope,KeyImpl.init(name),value,TagUtil.UPPER_CASE); 044 } 045 046 /** 047 * @return return thistag scope 048 */ 049 public abstract Struct getThisTagScope(); 050 051 /** 052 * @return return the caller scope 053 */ 054 public abstract Struct getCallerScope(); 055 056 /** 057 * @return return attributes scope 058 */ 059 public abstract Struct getAttributesScope(); 060 061 /** 062 * @return the variables scope 063 */ 064 public abstract Scope getVariablesScope(); 065 066 }