From: Aanand <aa...@th...> - 2006-08-25 08:54:50
|
Hi All, i have been trying to generate the HBM files for a new class that does not exist actullay. I'm trying to input virtual source classes to xdoclet to produce HBM files. I used the SiourceClass to rovide the details of a class. This is code : package xjavadoc; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import sun.java2d.loops.ScaledBlit; import xdoclet.ConfigParameter; import xdoclet.DocletContext; import xdoclet.DocletSupport; import xdoclet.DocletTask; import xdoclet.SubTask; import xdoclet.XDocletException; import xdoclet.loader.ModuleFinder; import xdoclet.modules.hibernate.HibernateDocletTask; import xdoclet.modules.hibernate.HibernateSubTask; import xdoclet.template.TemplateEngine; import xdoclet.util.DocletUtil; public class GenerateNewBean { public GenerateNewBean() { XJavaDoc jDoc = new XJavaDoc(); XTagFactory factory = new XTagFactory(); File f = new File("./NewClass.java"); try { f.createNewFile(); SourceClass sClass = new SourceClass(jDoc, f, false, factory); sClass.setQualifiedName("NewClass"); XTag tag = sClass.getDoc().addTag("hibernate.class", ""); tag.setAttribute("table", "NewClass"); tag.setAttribute("dynamic-update", "true"); ConstructorImpl constructor = new ConstructorImpl(sClass, sClass .getTagFactory()); /*FieldImpl field = new FieldImpl(sClass, sClass.getTagFactory()); field.setName("id"); field.setType("long"); sClass.addField(field);*/ FieldImpl field1 = new FieldImpl(sClass, sClass.getTagFactory()); field1.setName("empName"); field1.setType("String"); sClass.addField(field1); sClass.addConstructor(constructor); MethodImpl method = new MethodImpl(sClass, sClass.getTagFactory()); method.setReturnType("long"); method.setName("getId"); method.addModifier(0); XTag tag3 = method.getDoc().addTag("hibernate.id", ""); tag3.setAttribute("generator-class", "native"); tag3.setAttribute("column", "newID"); sClass.addMethod(method); MethodImpl method2 = new MethodImpl(sClass, sClass.getTagFactory()); method2.setReturnType("String"); method2.setName("getEmpName"); method2.addModifier(1); XTag tag2 = method2.getDoc().addTag("hibernate.property", ""); tag2.setAttribute("type", "string"); tag2.setAttribute("column", "name"); tag2.setAttribute("length", "50"); sClass.addMethod(method2); HibernateSubTask task = new HibernateSubTask(); ModuleFinder.initClasspath(task.getClass()); task.setDestinationFile("NewClass.hbm.xml"); HibernateSubTask.HibernateVersion version = new HibernateSubTask.HibernateVersion(); version.setValue("3.0"); task.setVersion(version); task.setCurrentClass(sClass); task.setDestDir(new File("./")); task.setMergeDir(new File("./")); task.setEngine(TemplateEngine.getEngineInstance()); HashMap configParams = new HashMap(); configParams.put("excludedtags","@version,@author,@todo,@se"); configParams.put("hibernate.destinationfile","{0}.hbm.xml"); configParams.put("addedtags","@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}"); configParams.put("hibernate.acceptinterfaces","true"); configParams.put("hibernate.validatexml","false"); configParams.put("hibernate.extent","hierarchy"); configParams.put("hibernate.currentpackage",""); configParams.put("hibernate.havingclasstag","hibernate.class"); configParams.put("hibernate.destdir",""); configParams.put("hibernate.packagesubstitutioninheritancesupported","true"); configParams.put("hibernate.useids","false"); configParams.put("tasktype","hibernatedoclet"); configParams.put("taskname","hibernatedoclet"); configParams.put("hibernate.version","3.0"); configParams.put("destdir","d:\\projects\\CodeGenerationInAction\\test"); configParams.put("hibernate.subtaskname","hibernate"); configParams.put("hibernate.packagesubstitutions",""); configParams.put("hibernate.templateurl","jar:file:/D:/projects/CodeGenerationInAction/lib/xdoclet-hibernate-module-1.2.3.jar!/xdoclet/modules/hibernate/resources/hibernate.xdt"); configParams.put("verbose","true"); configParams.put("hibernate.xmlencoding","UTF-8"); configParams.put("hibernate.acceptabstractclasses","true"); configParams.put("force","true"); configParams.put("hibernate.prefixwithpackagestructure","true"); DocletContext context = new DocletContext("./", "./", "@version,@author", new SubTask[] { task }, new Hashtable(), configParams, false, true, ""); context.setActiveSubTask(task); DocletContext.setSingleInstance(context); try { task.init(jDoc); task.execute(); } catch (XDocletException ex) { ex.printStackTrace(); } /*HibernateDocletTask topTask = new HibernateDocletTask(); topTask.addSubTask(task); topTask.init(); topTask.execute(); */ } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String[] args) { new GenerateNewBean(); } } But the hbm file generated does not have the mapping for the field empName. I tried to debug it and found that while parsing the hibernate template file called hibernate-properties.xdt, it skips the whole section of properties tag. Then i found that the property name returned by the method tag handler is null and thats why the section is being skipped. Can anybody help me in this? Thanks in advance. Aanand -- View this message in context: http://www.nabble.com/Hibernate-hbm-generation-programmatically-tf2163087.html#a5978218 Sent from the xdoclet-user forum at Nabble.com. |