package railo.runtime.cfx.customtag;
import railo.runtime.cfx.CFXTagException;
import railo.runtime.reflection.Reflector;
import com.allaire.cfx.CustomTag;
/**
*
*/
public final class JavaCFXTagClass implements CFXTagClass {
private String name;
private String strClass;
private Class clazz;
private boolean readOnly=false;
public JavaCFXTagClass(String name, String strClass) {
name=name.toLowerCase();
if(name.startsWith("cfx_"))name=name.substring(4);
this.name=name;
this.strClass=strClass;
}
private JavaCFXTagClass(String name, String strClass, Class clazz,boolean readOnly) {
this.name=name;
this.strClass=strClass;
this.clazz=clazz;
this.readOnly=readOnly;
}
@Override
public CustomTag newInstance() throws CFXTagException {
try {
return _newInstance();
} catch (Throwable e) {
throw new CFXTagException(e);
}
}
public CustomTag _newInstance() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Object o=getClazz().newInstance();
return (CustomTag)o;
}
/**
* @return Returns the clazz.
* @throws ClassNotFoundException
*/
public Class<CustomTag> getClazz() throws ClassNotFoundException {
if(clazz==null) {
clazz=this.getClass().getClassLoader().loadClass(strClass);
}
return clazz;
}
/**
* @return Returns the name.
*/
public String getName() {
return name;
}
/**
* @return Returns the strClass.
*/
public String getStrClass() {
return strClass;
}
@Override
public boolean isReadOnly() {
return readOnly;
}
@Override
public CFXTagClass cloneReadOnly() {
return new JavaCFXTagClass(name,strClass,clazz,true);
}
@Override
public String getDisplayType() {
return "Java";
}
@Override
public String getSourceName() {
return strClass;
}
@Override
public boolean isValid() {
try {
return Reflector.isInstaneOf(getClazz(),CustomTag.class);
}
catch (ClassNotFoundException e) {
return false;
}
}
}