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    }