001 package railo.transformer.library.tag; 002 003 import java.io.File; 004 import java.util.Map; 005 006 import railo.commons.collections.HashTable; 007 import railo.runtime.tag.CFImportTag; 008 009 010 /** 011 * extends the normal tag library, because Custom Tags has no restrictions by a TLD this Taglib accept everything 012 */ 013 public final class CustomTagLib extends TagLib { 014 015 private String textTagLib; 016 private TagLib[] taglibs; 017 018 019 /** 020 * constructor of the class 021 * @param textTagLib 022 * @param nameSpace the namespace definition 023 * @param nameSpaceSeperator the seperator beetween namespace and name of the tag 024 */ 025 public CustomTagLib(String textTagLib, String nameSpace,String nameSpaceSeperator) { 026 super(false); 027 this.textTagLib = textTagLib; 028 setNameSpace(nameSpace); 029 setNameSpaceSeperator(nameSpaceSeperator); 030 031 } 032 033 /** 034 * @see railo.transformer.library.tag.TagLib#getAppendixTag(java.lang.String) 035 */ 036 public TagLibTag getAppendixTag(String name) { 037 038 TagLibTag tlt = new TagLibTag(this); 039 tlt.setName(""); 040 tlt.setAppendix(true); 041 tlt.setTagClass(CFImportTag.class.getName()); 042 tlt.setHandleExceptions(true); 043 tlt.setBodyContent("free"); 044 tlt.setParseBody(false); 045 tlt.setDescription("Creates a CFML Custom Tag"); 046 tlt.setAttributeType(TagLibTag.ATTRIBUTE_TYPE_DYNAMIC); 047 048 TagLibTagAttr tlta=new TagLibTagAttr(tlt); 049 tlta.setName("__custom_tag_path"); 050 tlta.setRequired(true); 051 tlta.setRtexpr(true); 052 tlta.setType("string"); 053 tlta.setHidden(true); 054 tlta.setDefaultValue(textTagLib); 055 056 tlt.setAttribute(tlta); 057 setTag(tlt); 058 059 return tlt; 060 } 061 062 /** 063 * @see railo.transformer.library.tag.TagLib#getTag(java.lang.String) 064 */ 065 public TagLibTag getTag(String name) { 066 if(taglibs!=null){ 067 TagLibTag tag=null; 068 for(int i=0;i<taglibs.length;i++){ 069 if((tag=taglibs[i].getTag(name))!=null) return tag; 070 } 071 } 072 return null; 073 } 074 /** 075 * @see railo.transformer.library.tag.TagLib#getTags() 076 */ 077 public Map getTags() { 078 return new HashTable(); 079 } 080 081 /** 082 * @see railo.transformer.library.tag.TagLib#setTag(railo.transformer.library.tag.TagLibTag) 083 */ 084 public void setTag(TagLibTag tag) {} 085 086 public void append(TagLib other) { 087 if(other instanceof CustomTagLib) 088 textTagLib+=File.pathSeparatorChar+((CustomTagLib)other).textTagLib; 089 else{ 090 if(taglibs==null){ 091 taglibs=new TagLib[]{other}; 092 } 093 else { 094 TagLib[] tmp = new TagLib[taglibs.length+1]; 095 for(int i=0;i<taglibs.length;i++){ 096 tmp[i]=taglibs[i]; 097 } 098 tmp[taglibs.length]=other; 099 } 100 101 } 102 } 103 104 105 }