eh ? there already is one ;)

http://www.hibernate.org/98.html

and it's called Hbm2JavaTask

/max

Nicolas Mayeur wrote:

Hello! I am proposing this code to create an Ant task
for the CodeGenerator in hibernate extension.

SchemaGeneration has already one, I think
CodeGenerator needs one too.

Example of use :
<target name="codegenerator">
<taskdef name="codegenerator"
classname="net.sf.hibernate.tool.hbm2java.CodeGeneratorTask"
classpathref="hibernate.classpath"/>
<codegenerator output="${src}">
<fileset dir="${src}">
<include name="**/*.hbm.xml"/>
</fileset>
</codegenerator>
</target>





Nico


PS : I am not sure if I am using the right process to
contribute. If not : tell me!

package net.sf.hibernate.tool.hbm2java;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import net.sf.hibernate.MappingException;
import net.sf.hibernate.util.DTDEntityResolver;
import org.apache.commons.collections.MultiHashMap;
import org.apache.commons.collections.MultiMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.FileSet;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXParseException;
/*
* Created on 25 mars 2004 By Nicolas Mayeur
*/
/**
* * An Ant task for <tt>CodeGenerator</tt>.
* * <pre>
* &lt;taskdef name=&quot;codegenerator&quot;
* classname=&quot;net.sf.hibernate.tool.hbm2java.CodeGeneratorTask&quot;
* classpathref=&quot;class.path&quot;/&gt;
* * &lt;codegenerator
* output=&quot;dirname&quot;
* config=&quot;filename&quot;&gt;
* &lt;fileset
dir=&quot;${build.classes.dir}&quot;&gt;
* &lt;include name=&quot;*.hbm.xml&quot;/&gt;
* &lt;/fileset&gt;
* &lt;/codegenerator&gt;
* </pre>
* * @see CodeGenerator
* @author Nicolas Mayeur
*
*/
public class CodeGeneratorTask extends Task {
private List fileSets = new LinkedList();
private String output = "";
private String config = "";
private static final Log log =
LogFactory.getLog(CodeGenerator.class);
public void addFileset(FileSet set) {
fileSets.add(set);
}
/**
* @param config
* The config to set.
*/
public void setConfig(String config) {
this.config = config;
}
/**
* @param output
* The output to set.
*/
public void setOutput(String output) {
this.output = output;
}
public void execute() throws BuildException {
try {
List generators = new ArrayList();
MultiMap globalMetas = new MultiHashMap();
SAXBuilder builder = new SAXBuilder();
builder.setEntityResolver(new DTDEntityResolver());
builder.setErrorHandler(new ErrorHandler() {
public void error(SAXParseException error) {
log.error("Error parsing XML: " +
error.getSystemId() + '('
+ error.getLineNumber() + ')', error);
}
public void fatalError(SAXParseException error) {
error(error);
}
public void warning(SAXParseException error) {
log.warn("Warning parsing XML: " +
error.getSystemId()
+ '(' + error.getLineNumber() + ')');
}
});
String outputDir = null;
ArrayList mappingFiles = new ArrayList();
mappingFiles = getFiles();
if (!config.equals("")) {
// parse config xml file
Document document = builder.build(new
File(output));
globalMetas =
MetaAttributeHelper.loadAndMergeMetaMap(document
.getRootElement(), null);
Iterator generateElements =
document.getRootElement()
.getChildren("generate").iterator();
while (generateElements.hasNext()) {
generators.add(new Generator((Element)
generateElements
.next()));
}
}
if (!output.equals("")) {
outputDir = output;
}
// if no config xml file, add a default generator
if (generators.size() == 0) {
generators.add(new Generator());
}
HashMap classMappings = new HashMap();
builder.setValidation(true);
for (Iterator iter = mappingFiles.iterator();
iter.hasNext();) {
// parse the mapping file
File file = new File((String) iter.next());
System.out.println(file.getCanonicalFile());
Document document = builder.build(file);
Element rootElement = document.getRootElement();
Iterator classElements =
rootElement.getChildren("class")
.iterator();
MultiMap mm =
MetaAttributeHelper.loadAndMergeMetaMap(
rootElement, globalMetas);
handleClass(classMappings, classElements, mm,
false);
classElements =
rootElement.getChildren("subclass").iterator();
handleClass(classMappings, classElements, mm,
true);
classElements =
rootElement.getChildren("joined-subclass")
.iterator();
handleClass(classMappings, classElements, mm,
true);
}
// generate source files
for (Iterator iterator = generators.iterator();
iterator.hasNext();) {
Generator g = (Generator) iterator.next();
g.setBaseDirName(outputDir);
g.generate(classMappings);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static void handleClass(HashMap
classMappings,
Iterator classElements, MultiMap mm, boolean
extendz)
throws MappingException {
while (classElements.hasNext()) {
Element clazz = (Element) classElements.next();
if (!extendz) {
ClassMapping cmap = new ClassMapping(clazz, mm);
classMappings.put(cmap.getCanonicalName(), cmap);
} else {
String ex = clazz.getAttributeValue("extends");
if (ex == null) {
throw new MappingException("Missing extends
attribute on <"
+ clazz.getName() + " name="
+ clazz.getAttributeValue("name") + ">");
}
ClassMapping superclass = (ClassMapping)
classMappings.get(ex);
if (superclass == null) {
throw new MappingException("Cannot extend
unmapped class "
+ ex);
}
ClassMapping subclassMapping = new
ClassMapping(superclass
.getClassName(), superclass, clazz, mm);
superclass.addSubClass(subclassMapping);
}
}
}
private ArrayList getFiles() {
ArrayList files = new ArrayList();
for (Iterator i = fileSets.iterator(); i.hasNext();)
{
FileSet fs = (FileSet) i.next();
DirectoryScanner ds =
fs.getDirectoryScanner(project);
String[] dsFiles = ds.getIncludedFiles();
for (int j = 0; j < dsFiles.length; j++) {
File f = new File(dsFiles[j]);
if (!f.isFile()) {
f = new File(ds.getBasedir(), dsFiles[j]);
}
files.add(f.getAbsolutePath());
}
}
return files;
}
}








Yahoo! Mail : votre e-mail personnel et gratuit qui vous suit partout ! Créez votre Yahoo! Mail sur http://fr.benefits.yahoo.com/


Dialoguez en direct avec vos amis grâce à Yahoo! Messenger !Téléchargez Yahoo! Messenger sur http://fr.messenger.yahoo.com


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
hibernate-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/hibernate-devel





------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ hibernate-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/hibernate-devel

Reply via email to