package railo.transformer.library.tag; import java.util.Iterator; import railo.commons.lang.StringUtil; public final class TagLibTagScript { public static final short TYPE_NONE = 0; public static final short TYPE_SINGLE = 1; public static final short TYPE_MULTIPLE = 2; public static final short CTX_OTHER = -1; public static final short CTX_NONE = 0; public static final short CTX_IF = 1; public static final short CTX_ELSE_IF = 2; public static final short CTX_ELSE = 3; public static final short CTX_FOR = 4; public static final short CTX_WHILE = 5; public static final short CTX_DO_WHILE = 6; public static final short CTX_CFC = 7; public static final short CTX_INTERFACE = 8; public static final short CTX_FUNCTION = 9; public static final short CTX_BLOCK = 10; public static final short CTX_FINALLY = 11; public static final short CTX_SWITCH = 12; public static final short CTX_TRY = 13; public static final short CTX_CATCH = 14; public static final short CTX_TRANSACTION = 15; public static final short CTX_THREAD = 16; public static final short CTX_SAVECONTENT = 17; public static final short CTX_LOCK = 18; public static final short CTX_LOOP = 19; public static final short CTX_QUERY = 20; public static final short CTX_ZIP = 21; private final static TagLibTagAttr UNDEFINED=new TagLibTagAttr(null); private TagLibTag tag; private boolean rtexpr; private short type=TYPE_NONE; private TagLibTagAttr singleAttr=UNDEFINED; private short context=CTX_OTHER; public TagLibTagScript(TagLibTag tag) { this.tag=tag; } public void setType(String type) { if(!StringUtil.isEmpty(type,true)) { type=type.trim().toLowerCase(); if("single".equals(type)) this.type=TYPE_SINGLE; else if("multiple".equals(type)) this.type=TYPE_MULTIPLE; } } public void setRtexpr(boolean rtexpr) { this.rtexpr=rtexpr; } /** * @return the tag */ public TagLibTag getTag() { return tag; } /** * @return the rtexpr */ public boolean getRtexpr() { return rtexpr; } /** * @return the type */ public short getType() { return type; } public String getTypeAsString() { if(type==TYPE_MULTIPLE) return "multiple"; if(type==TYPE_SINGLE) return "single"; return "none"; } public TagLibTagAttr getSingleAttr() { if(singleAttr==UNDEFINED) { singleAttr=null; Iterator<TagLibTagAttr> it = tag.getAttributes().values().iterator(); TagLibTagAttr attr; while(it.hasNext()){ attr=it.next(); if(attr.getScriptSupport()!=TagLibTagAttr.SCRIPT_SUPPORT_NONE){ singleAttr=attr; break; } } } return singleAttr; } public void setContext(String str) { if(!StringUtil.isEmpty(str,true)) { str=str.trim().toLowerCase(); if("none".equals(str)) this.context=CTX_NONE; else if("if".equals(str)) this.context=CTX_IF; else if("elseif".equals(str)) this.context=CTX_ELSE_IF; else if("else".equals(str)) this.context=CTX_ELSE; else if("for".equals(str)) this.context=CTX_FOR; else if("while".equals(str)) this.context=CTX_WHILE; else if("dowhile".equals(str)) this.context=CTX_DO_WHILE; else if("cfc".equals(str)) this.context=CTX_CFC; else if("component".equals(str)) this.context=CTX_CFC; else if("interface".equals(str)) this.context=CTX_INTERFACE; else if("function".equals(str)) this.context=CTX_FUNCTION; else if("block".equals(str)) this.context=CTX_BLOCK; else if("finally".equals(str)) this.context=CTX_FINALLY; else if("switch".equals(str)) this.context=CTX_SWITCH; else if("try".equals(str)) this.context=CTX_TRY; else if("catch".equals(str)) this.context=CTX_CATCH; else if("transaction".equals(str)) this.context=CTX_TRANSACTION; else if("thread".equals(str)) this.context=CTX_THREAD; else if("savecontent".equals(str)) this.context=CTX_SAVECONTENT; else if("lock".equals(str)) this.context=CTX_LOCK; else if("loop".equals(str)) this.context=CTX_LOOP; else if("query".equals(str)) this.context=CTX_QUERY; else if("zip".equals(str)) this.context=CTX_ZIP; } } /** * @return the context */ public short getContext() { return context; } }