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.Scope; 009 import railo.runtime.type.Struct; 010 import railo.runtime.type.StructImpl; 011 import railo.runtime.type.scope.Caller; 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 /** 037 * @see javax.servlet.jsp.tagext.BodyTag#doInitBody() 038 */ 039 public void doInitBody() {} 040 041 042 043 /** 044 * @see railo.runtime.ext.tag.DynamicAttributes#setDynamicAttribute(java.lang.String, java.lang.String, java.lang.Object) 045 */ 046 public final void setDynamicAttribute(String uri, String name, Object value) { 047 TagUtil.setDynamicAttribute(attributesScope,name,value,TagUtil.UPPER_CASE); 048 } 049 050 /** 051 * @return return thistag scope 052 */ 053 public abstract Struct getThisTagScope(); 054 055 /** 056 * @return return the caller scope 057 */ 058 public abstract Struct getCallerScope(); 059 060 /** 061 * @return return attributes scope 062 */ 063 public abstract Struct getAttributesScope(); 064 065 /** 066 * @return the variables scope 067 */ 068 public abstract Scope getVariablesScope(); 069 070 }