package railo.runtime.cfx.customtag;
import java.util.Map;
import java.util.Set;
import railo.commons.collection.MapFactory;
import railo.runtime.cfx.CFXTagException;
import railo.runtime.cfx.CFXTagPool;
import railo.runtime.config.Config;
import railo.runtime.type.util.ListUtil;
import com.allaire.cfx.CustomTag;
/**
*
*/
public final class CFXTagPoolImpl implements CFXTagPool {
Config config;
Map<String,CFXTagClass> classes;
Map<String,CFXTagClass> objects=MapFactory.<String,CFXTagClass>getConcurrentMap();
/**
* constructor of the class
* @param classes
*/
public CFXTagPoolImpl(Map<String,CFXTagClass> classes) {
this.classes=classes;
}
@Override
public Map<String,CFXTagClass> getClasses() {// FUTURE add generic type to interface
return classes;
}
@Override
public synchronized CustomTag getCustomTag(String name) throws CFXTagException {
name=name.toLowerCase();
Object o=classes.get(name);
if(o==null) {
Set<String> set = classes.keySet();
String names = ListUtil.arrayToList(set.toArray(new String[set.size()]),",");
throw new CFXTagException("there is no Custom Tag (CFX) with name ["+name+"], available Custom Tags are ["+names+"]");
}
CFXTagClass ctc=(CFXTagClass) o;
CustomTag ct = ctc.newInstance();
//if(!(o instanceof CustomTag))throw new CFXTagException("["+name+"] is not of type ["+CustomTag.class.getName()+"]");
return ct;
}
@Override
public synchronized CFXTagClass getCFXTagClass(String name) throws CFXTagException {
name=name.toLowerCase();
CFXTagClass ctc = classes.get(name);
if(ctc==null) throw new CFXTagException("there is not Custom Tag (CFX) with name ["+name+"]");
return ctc;
}
@Override
public synchronized void releaseCustomTag(CustomTag ct) {
//table.put(ct.getClass().toString(),ct);
}
public synchronized void releaseTag(Object tag) {
//table.put(ct.getClass().toString(),ct);
}
}