Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
… subreport on subsequent calls to Dataset

git-svn-id: http://svn.jboss.org/repos/jbosstools/branches/jbosstools-3.0.x@16661 a97e2381-89e5-4abb-bab3-167db6db766c
  • Loading branch information
snjeza committed Jul 19, 2009
1 parent a1e1983 commit 23f2c26
Show file tree
Hide file tree
Showing 8 changed files with 146 additions and 454 deletions.
Expand Up @@ -10,11 +10,11 @@
************************************************************************************/
package org.jboss.tools.birt.oda;

import java.util.Iterator;
import java.util.List;

import org.eclipse.datatools.connectivity.oda.OdaException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.jboss.tools.birt.oda.impl.HibernateOdaQuery;
import org.jboss.tools.birt.oda.impl.HibernateResult;
import org.jboss.tools.birt.oda.impl.HibernateResultSetMetaData;

/**
Expand All @@ -31,12 +31,9 @@ public interface IOdaFactory {

void close();
boolean isOpen();
HibernateResultSetMetaData prepare(String queryText) throws OdaException;
HibernateResultSetMetaData prepare(String queryText,Session session) throws OdaException;
void setMaxRows(int max);
int getMaxRows();
void executeQuery(HibernateOdaQuery query) throws OdaException;
Iterator getIterator();
List getResult();
Object getResult(int rstcol) throws OdaException;
void next();
HibernateResult executeQuery(HibernateOdaQuery query,Session session) throws OdaException;
SessionFactory getSessionFactory();
}
Expand Up @@ -2,22 +2,17 @@

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;

import org.eclipse.datatools.connectivity.oda.IParameterMetaData;
import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
import org.eclipse.datatools.connectivity.oda.OdaException;
import org.eclipse.osgi.util.NLS;
import org.hibernate.EntityMode;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.engine.query.HQLQueryPlan;
import org.hibernate.impl.SessionFactoryImpl;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.type.Type;
import org.jboss.tools.birt.oda.IOdaFactory;
import org.jboss.tools.birt.oda.Messages;
Expand All @@ -26,40 +21,41 @@ public abstract class AbstractOdaFactory implements IOdaFactory {

protected SessionFactory sessionFactory;
private int maxRows;
private List result;
private Iterator iterator;
private Type[] queryReturnTypes;
private Object currentRow;
private HibernateOdaQuery query;
private Session session;
//private List result;
//private Iterator iterator;
//private Type[] queryReturnTypes;
//private Object currentRow;
//private HibernateOdaQuery query;
//private Session session;
private String queryText;

public void close() {
sessionFactory = null;
if (session != null) {
session.close();
session = null;
}
// if (session != null) {
// session.close();
// session = null;
// }
}

public boolean isOpen() {
return getSessionFactory() != null;
}

public SessionFactory getSessionFactory() {
return sessionFactory;
}

public HibernateResultSetMetaData prepare(String queryText) throws OdaException {
public HibernateResultSetMetaData prepare(String queryText,Session session) throws OdaException {
this.queryText = queryText;
return parseQuery();
return parseQuery(session);
}

private HibernateResultSetMetaData parseQuery()
private HibernateResultSetMetaData parseQuery(Session session)
throws OdaException {
List arColsType = new ArrayList();
List arCols = new ArrayList();
List arColClass = new ArrayList();
String[] props = null;
Session session = null;
try {
session = getSessionFactory().openSession();
Query query = session.createQuery(queryText);
int maxRows = getMaxRows();
if (maxRows > 0) {
Expand Down Expand Up @@ -112,10 +108,6 @@ private HibernateResultSetMetaData parseQuery()
.toArray(new String[arColClass.size()]));
} catch (Exception e) {
throw new OdaException(e.getLocalizedMessage());
} finally {
if (session != null) {
session.close();
}
}
}

Expand Down Expand Up @@ -156,10 +148,8 @@ public void setMaxRows(int maxRows) {
this.maxRows = maxRows;
}

public void executeQuery(HibernateOdaQuery query) throws OdaException {
this.query = query;
public HibernateResult executeQuery(HibernateOdaQuery query,Session session) throws OdaException {
try {
session = getSessionFactory().openSession();
Query q = session.createQuery(queryText);
HibernateParameterMetaData parameterMetaData = (HibernateParameterMetaData) query.getParameterMetaData();
List<Parameter> parameters = parameterMetaData.getParameters();
Expand All @@ -174,58 +164,11 @@ public void executeQuery(HibernateOdaQuery query) throws OdaException {
break;
}
}
result = q.list();
iterator = result.iterator();
this.queryReturnTypes = q.getReturnTypes();
HibernateResult hibernateResult = new HibernateResult(q,this, query);
return hibernateResult;
} catch (HibernateException e) {
throw new OdaException(e.getLocalizedMessage());
}
}

public Iterator getIterator() {
return iterator;
}

public List getResult() {
return result;
}

public Object getResult(int rstcol) throws OdaException {
Object obj = this.currentRow;
Object value = null;
try {
if (queryReturnTypes.length > 0
&& queryReturnTypes[0].isEntityType()) {
String checkClass = ((HibernateResultSetMetaData) getMetaData())
.getColumnClass(rstcol);
SessionFactory sf = getSessionFactory();
ClassMetadata metadata = sf.getClassMetadata(checkClass);
if (metadata == null) {
metadata = sf.getClassMetadata(obj.getClass());
}
value = metadata.getPropertyValue(obj, getMetaData()
.getColumnName(rstcol), EntityMode.POJO);
} else {
if (getMetaData().getColumnCount() == 1) {
value = obj;
} else {
Object[] values = (Object[]) obj;
value = values[rstcol - 1];
}
}
} catch (Exception e) {
throw new OdaException(e.getLocalizedMessage());
}
return (value);
}

private IResultSetMetaData getMetaData() throws OdaException {
return query.getMetaData();
}

public void next() {
currentRow = getIterator().next();
}


}
Expand Up @@ -29,7 +29,7 @@
public class ConsoleConfigurationOdaFactory extends AbstractOdaFactory {

ConsoleConfiguration consoleConfiguration;

public ConsoleConfigurationOdaFactory(Properties properties) throws OdaException {
getSessionFactory(properties);
String maxRowString = properties.getProperty(IOdaFactory.MAX_ROWS);
Expand All @@ -49,7 +49,7 @@ public SessionFactory getSessionFactory(Properties properties) throws OdaExcepti
break;
}
}
if (isOpen()) {
if (!isOpen()) {
try {
sessionFactory = consoleConfiguration.getSessionFactory();
if (sessionFactory == null) {
Expand All @@ -65,14 +65,5 @@ public SessionFactory getSessionFactory(Properties properties) throws OdaExcepti
}
return sessionFactory;
}

@Override
public void close() {
consoleConfiguration = null;
super.close();
}

public boolean isOpen() {
return consoleConfiguration != null;
}
}
Expand Up @@ -16,6 +16,7 @@
import org.eclipse.datatools.connectivity.oda.IDataSetMetaData;
import org.eclipse.datatools.connectivity.oda.IQuery;
import org.eclipse.datatools.connectivity.oda.OdaException;
import org.hibernate.Session;
import org.jboss.tools.birt.oda.IOdaFactory;
import org.jboss.tools.birt.oda.Messages;
import org.osgi.framework.Bundle;
Expand All @@ -27,7 +28,9 @@
*/
public class HibernateConnection implements IConnection {
private IOdaFactory odaSessionFactory;
private Map appContext;
private Session session;

//private Map appContext;

/*
* @see
Expand All @@ -43,6 +46,7 @@ public void open(Properties connProperties) throws OdaException {
} else {
odaSessionFactory = new ServerOdaFactory(connProperties);
}
session = odaSessionFactory.getSessionFactory().openSession();
}

/*
Expand All @@ -54,21 +58,28 @@ public void setAppContext(Object context) throws OdaException {
if (!(context instanceof Map)) {
throw new OdaException(Messages.HibernateConnection_Invalid_AppContext);
}
this.appContext = (Map) context;
//this.appContext = (Map) context;
}

/*
* @see org.eclipse.datatools.connectivity.oda.IConnection#close()
*/
public void close() throws OdaException {
odaSessionFactory.close();
if (odaSessionFactory != null) {
odaSessionFactory.close();
odaSessionFactory = null;
}
if (session != null) {
session.close();
session = null;
}
}

/*
* @see org.eclipse.datatools.connectivity.oda.IConnection#isOpen()
*/
public boolean isOpen() throws OdaException {
return odaSessionFactory != null && odaSessionFactory.isOpen();
return session != null && session.isOpen();
}

/*
Expand Down Expand Up @@ -114,13 +125,13 @@ public void rollback() throws OdaException {
// do nothing; assumes no transaction support needed
}

/*
* public SessionFactory getSessionFactory() { return
* odaSessionFactory.getSessionFactory(); }
*/

public IOdaFactory getOdaSessionFactory() {
return odaSessionFactory;
}

public Session getSession() {
return session;
}


}
Expand Up @@ -20,7 +20,7 @@
import org.eclipse.datatools.connectivity.oda.IResultSetMetaData;
import org.eclipse.datatools.connectivity.oda.OdaException;
import org.eclipse.datatools.connectivity.oda.SortSpec;
import org.jboss.tools.birt.oda.Messages;
import org.hibernate.Session;

/**
* Implementation class of IQuery for an ODA runtime driver.
Expand All @@ -31,9 +31,11 @@ public class HibernateOdaQuery implements IQuery {
private HibernateConnection connection;
private HibernateResultSetMetaData resultSetMetaData;
private HibernateParameterMetaData parameterMetaData = new HibernateParameterMetaData();
private Session session;

public HibernateOdaQuery(HibernateConnection connection) {
this.connection = connection;
this.session = connection.getSession();
}

/*
Expand All @@ -42,7 +44,7 @@ public HibernateOdaQuery(HibernateConnection connection) {
*/
public void prepare(String queryText) throws OdaException {
this.resultSetMetaData = getConnection().getOdaSessionFactory()
.prepare(queryText);
.prepare(queryText,session);
}

/*
Expand Down

0 comments on commit 23f2c26

Please sign in to comment.