package railo.transformer.library.tag;
import java.io.File;
import java.util.Map;
import railo.commons.collection.MapFactory;
import railo.runtime.tag.CFImportTag;
/**
* extends the normal tag library, because Custom Tags has no restrictions by a TLD this Taglib accept everything
*/
public final class CustomTagLib extends TagLib {
private String textTagLib;
private TagLib[] taglibs;
/**
* constructor of the class
* @param textTagLib
* @param nameSpace the namespace definition
* @param nameSpaceSeperator the seperator beetween namespace and name of the tag
*/
public CustomTagLib(String textTagLib, String nameSpace,String nameSpaceSeperator) {
super(false);
this.textTagLib = textTagLib;
setNameSpace(nameSpace);
setNameSpaceSeperator(nameSpaceSeperator);
}
/**
* @see railo.transformer.library.tag.TagLib#getAppendixTag(java.lang.String)
*/
public TagLibTag getAppendixTag(String name) {
TagLibTag tlt = new TagLibTag(this);
tlt.setName("");
tlt.setAppendix(true);
tlt.setTagClass(CFImportTag.class.getName());
tlt.setHandleExceptions(true);
tlt.setBodyContent("free");
tlt.setParseBody(false);
tlt.setDescription("Creates a CFML Custom Tag");
tlt.setAttributeType(TagLibTag.ATTRIBUTE_TYPE_DYNAMIC);
TagLibTagAttr tlta=new TagLibTagAttr(tlt);
tlta.setName("__custom_tag_path");
tlta.setRequired(true);
tlta.setRtexpr(true);
tlta.setType("string");
tlta.setHidden(true);
tlta.setDefaultValue(textTagLib);
tlt.setAttribute(tlta);
setTag(tlt);
return tlt;
}
/**
* @see railo.transformer.library.tag.TagLib#getTag(java.lang.String)
*/
public TagLibTag getTag(String name) {
if(taglibs!=null){
TagLibTag tag=null;
for(int i=0;i<taglibs.length;i++){
if((tag=taglibs[i].getTag(name))!=null) return tag;
}
}
return null;
}
/**
* @see railo.transformer.library.tag.TagLib#getTags()
*/
public Map getTags() {
return MapFactory.<String,String>getConcurrentMap();
}
/**
* @see railo.transformer.library.tag.TagLib#setTag(railo.transformer.library.tag.TagLibTag)
*/
public void setTag(TagLibTag tag) {}
public void append(TagLib other) {
if(other instanceof CustomTagLib)
textTagLib+=File.pathSeparatorChar+((CustomTagLib)other).textTagLib;
else{
if(taglibs==null){
taglibs=new TagLib[]{other};
}
else {
TagLib[] tmp = new TagLib[taglibs.length+1];
for(int i=0;i<taglibs.length;i++){
tmp[i]=taglibs[i];
}
tmp[taglibs.length]=other;
}
}
}
}