001 package railo.runtime.cfx.customtag; 002 003 import railo.runtime.cfx.CFXTagException; 004 import railo.runtime.reflection.Reflector; 005 006 import com.allaire.cfx.CustomTag; 007 008 /** 009 * 010 */ 011 public final class JavaCFXTagClass implements CFXTagClass { 012 013 private String name; 014 private String strClass; 015 private Class clazz; 016 private boolean readOnly=false; 017 018 019 public JavaCFXTagClass(String name, String strClass) { 020 name=name.toLowerCase(); 021 if(name.startsWith("cfx_"))name=name.substring(4); 022 this.name=name; 023 this.strClass=strClass; 024 } 025 private JavaCFXTagClass(String name, String strClass, Class clazz,boolean readOnly) { 026 027 this.name=name; 028 this.strClass=strClass; 029 this.clazz=clazz; 030 this.readOnly=readOnly; 031 } 032 033 @Override 034 public CustomTag newInstance() throws CFXTagException { 035 try { 036 return _newInstance(); 037 } catch (Throwable e) { 038 throw new CFXTagException(e); 039 } 040 } 041 042 public CustomTag _newInstance() throws ClassNotFoundException, InstantiationException, IllegalAccessException { 043 044 Object o=getClazz().newInstance(); 045 return (CustomTag)o; 046 } 047 /** 048 * @return Returns the clazz. 049 * @throws ClassNotFoundException 050 */ 051 public Class<CustomTag> getClazz() throws ClassNotFoundException { 052 if(clazz==null) { 053 clazz=this.getClass().getClassLoader().loadClass(strClass); 054 } 055 return clazz; 056 } 057 058 /** 059 * @return Returns the name. 060 */ 061 public String getName() { 062 return name; 063 } 064 /** 065 * @return Returns the strClass. 066 */ 067 public String getStrClass() { 068 return strClass; 069 } 070 071 @Override 072 public boolean isReadOnly() { 073 return readOnly; 074 } 075 076 @Override 077 public CFXTagClass cloneReadOnly() { 078 return new JavaCFXTagClass(name,strClass,clazz,true); 079 } 080 @Override 081 public String getDisplayType() { 082 return "Java"; 083 } 084 @Override 085 public String getSourceName() { 086 return strClass; 087 } 088 089 @Override 090 public boolean isValid() { 091 try { 092 return Reflector.isInstaneOf(getClazz(),CustomTag.class); 093 } 094 catch (ClassNotFoundException e) { 095 return false; 096 } 097 } 098 }