package org.hibernate.tool.hbm2x;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
/**
* exporter for query execution.
*
**/
public class QueryExporter extends AbstractExporter {
private String filename;
private List<String> queryStrings;
@SuppressWarnings({ "unchecked" })
public void doStart() {
Session session = null;
SessionFactory sessionFactory = null;
Transaction transaction = null;
try {
sessionFactory = getConfiguration().buildSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
for (Iterator<String> iter = queryStrings.iterator(); iter.hasNext();) {
String query = (String) iter.next();
List<Object> list = session.createQuery(query).getResultList();
if(getFileName()!=null) {
PrintWriter pw = null;
try {
File file = new File( getOutputDirectory(), getFileName() );
getTemplateHelper().ensureExistence( file );
pw = new PrintWriter( new FileWriter( file, true ) );
getArtifactCollector().addFile( file, "query-output" );
for (Iterator<Object> iter1 = list.iterator(); iter1.hasNext();) {
Object element = iter1.next();
pw.println(element);
}
}
catch (IOException e) {
throw new ExporterException("Could not write query output",e);
} finally {
if(pw!=null) {
pw.flush();
pw.close();
}
}
}
}
transaction.commit();
} catch(HibernateException he) {
if(transaction!=null) {
transaction.rollback();
}
throw new ExporterException("Error occured while trying to execute query", he);
} finally {
if(session!=null) {
session.close();
}
if(sessionFactory!=null) {
sessionFactory.close();
}
}
}
private String getFileName() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public void setQueries(List<String> queryStrings) {
this.queryStrings = queryStrings;
}
}