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    }