001 /* 002 @license.text@ 003 */ 004 package biz.hammurapi.sqlc; 005 006 import org.apache.tools.ant.AntClassLoader; 007 import org.apache.tools.ant.BuildException; 008 import org.apache.tools.ant.Task; 009 import org.apache.tools.ant.types.Path; 010 011 /** 012 * Interface to extend 013 * @ant.element name="interface" 014 * @author Pavel Vlasov 015 * @version $Revision: 1.3 $ 016 */ 017 public class InterfaceEntry extends Task { 018 private ClassLoader classLoader; 019 020 void setClassLoader(ClassLoader classLoader) { 021 this.classLoader=classLoader; 022 } 023 024 /** 025 * Interface name. 026 * @ant.required 027 * @param name 028 */ 029 public void setName(String name) { 030 this.interfaceName = name; 031 } 032 033 /** 034 * Maybe creates a nested classpath element. 035 * @ant :non-required 036 */ 037 public Path createClasspath() { 038 if (classPath == null) { 039 classPath = new Path(getProject()); 040 } 041 return classPath.createPath(); 042 } 043 044 public void setClassPath(Path classPath) { 045 if (this.classPath == null) { 046 this.classPath = classPath; 047 } else { 048 this.classPath.append(classPath); 049 } 050 } 051 052 /** 053 * Classpath for loading classes. 054 * @ant :non-required 055 */ 056 protected Path classPath; 057 058 private String interfaceName; 059 060 Class getInterface() { 061 try { 062 Class ret; 063 if (classPath==null) { 064 ret = Class.forName(interfaceName); 065 } else if (classLoader==null) { 066 ret = new AntClassLoader(getProject(), classPath).loadClass(interfaceName); 067 } else { 068 ret = new AntClassLoader(classLoader, getProject(), classPath, true).loadClass(interfaceName); 069 } 070 071 if (!ret.isInterface()) { 072 throw new BuildException(ret.getName()+" is not an interface"); 073 } 074 return ret; 075 } catch (ClassNotFoundException e) { 076 throw new BuildException("Class not found: "+e, e); 077 } 078 } 079 }