2
0
Fork 0

Upgraded backend api with generics.

This commit is contained in:
Willem Cazander 2014-05-28 14:16:03 +02:00
parent 9a6227be5b
commit 1b3e65fa83
53 changed files with 282 additions and 256 deletions

View file

@ -22,6 +22,7 @@
package net.forwardfire.vasc.backend;
import java.io.Serializable;
import java.util.Map;
/**
@ -29,7 +30,7 @@ import java.util.Map;
* @author Willem Cazander
* @version 1.0 Aug 2, 2007
*/
abstract public class AbstractVascBackend implements VascBackend {
abstract public class AbstractVascBackend<DATA_OBJECT extends Serializable> implements VascBackend<DATA_OBJECT> {
private String id = null;

View file

@ -22,6 +22,7 @@
package net.forwardfire.vasc.backend;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
@ -31,7 +32,7 @@ import java.util.Map;
* @author Willem Cazander
* @version 1.0 Mar 21, 2007
*/
public interface VascBackend {
public interface VascBackend<DATA_OBJECT extends Serializable> {
public String getId();
public void setId(String id);
@ -39,15 +40,15 @@ public interface VascBackend {
public void startBackend();
public void stopBackend();
public List<Object> execute(VascBackendState state) throws VascBackendException;
public List<DATA_OBJECT> execute(VascBackendState state) throws VascBackendException;
public boolean isReadOnly();
public void persist(Object object) throws VascBackendException;
public void persist(DATA_OBJECT object) throws VascBackendException;
public Object merge(Object object) throws VascBackendException;
public DATA_OBJECT merge(DATA_OBJECT object) throws VascBackendException;
public void delete(Object object) throws VascBackendException;
public void delete(DATA_OBJECT object) throws VascBackendException;
/**
* Creates a new Field acces obj the the given field entry.
@ -61,7 +62,7 @@ public interface VascBackend {
* note: Do not use inline class here because it needs to be seriabable and the backend is not seriabbzle.
* @return
*/
public VascEntryRecordCreator provideVascEntryRecordCreator();
public VascEntryRecordCreator<DATA_OBJECT> provideVascEntryRecordCreator();
/**
* Defines if the backend supports sorting

View file

@ -30,9 +30,7 @@ import java.io.Serializable;
* @author Willem Cazander
* @version 1.0 Mar 21, 2007
*/
public interface VascEntryRecordCreator extends Serializable {
public interface VascEntryRecordCreator<DATA_OBJECT extends Serializable> extends Serializable {
public Object newRecord() throws VascBackendException;
public Class<?> getObjectClass();
public DATA_OBJECT newRecord() throws VascBackendException;
}

View file

@ -22,6 +22,8 @@
package net.forwardfire.vasc.backend.data;
import java.io.Serializable;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
@ -32,7 +34,7 @@ import net.forwardfire.vasc.backend.VascEntryRecordCreator;
* @author Willem Cazander
* @version 1.0 Dec 05, 2009
*/
public class BeanVascEntryRecordCreator implements VascEntryRecordCreator {
public class BeanVascEntryRecordCreator<DATA_OBJECT extends Serializable> implements VascEntryRecordCreator<DATA_OBJECT> {
private static final long serialVersionUID = 1L;
private Class<?> resultClass = null;
@ -43,14 +45,11 @@ public class BeanVascEntryRecordCreator implements VascEntryRecordCreator {
}
this.resultClass=resultClass;
}
public Class<?> getObjectClass() {
return resultClass;
}
public Object newRecord() throws VascBackendException {
@SuppressWarnings("unchecked")
public DATA_OBJECT newRecord() throws VascBackendException {
try {
return resultClass.newInstance();
return (DATA_OBJECT)resultClass.newInstance();
} catch (InstantiationException e) {
throw new VascBackendException(e);
} catch (IllegalAccessException e) {

View file

@ -34,7 +34,7 @@ import net.forwardfire.vasc.backend.VascEntryFieldValue;
* @author Willem Cazander
* @version 1.0 Dec 05, 2009
*/
public class MapVascEntryFieldValue implements VascEntryFieldValue {
public class HashMapVascEntryFieldValue implements VascEntryFieldValue {
private static final long serialVersionUID = 1L;

View file

@ -23,27 +23,21 @@
package net.forwardfire.vasc.backend.data;
import java.util.HashMap;
import java.util.Map;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
/**
* MapVascEntryRecordCreator creates a new HashMap for Map based record backends.
*
* @author Willem Cazander
* @version 1.0 Dec 05, 2009
*/
public class MapVascEntryRecordCreator implements VascEntryRecordCreator {
public class HashMapVascEntryRecordCreator implements VascEntryRecordCreator<HashMap<String,Object>> {
private static final long serialVersionUID = 1L;
public Class<?> getObjectClass() {
return Map.class;
}
public Object newRecord() throws VascBackendException {
public HashMap<String,Object> newRecord() throws VascBackendException {
return new HashMap<String,Object>(10);
}
}

View file

@ -24,20 +24,19 @@ package net.forwardfire.vasc.backend.jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.forwardfire.vasc.backend.AbstractVascBackend;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascBackendState;
import net.forwardfire.vasc.backend.VascEntryFieldValue;
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
import net.forwardfire.vasc.backend.data.MapVascEntryFieldValue;
import net.forwardfire.vasc.backend.data.MapVascEntryRecordCreator;
import net.forwardfire.vasc.backend.data.HashMapVascEntryFieldValue;
import net.forwardfire.vasc.backend.data.HashMapVascEntryRecordCreator;
/**
* JdbcVascBackend Simple jdbc vasc backend.
@ -45,7 +44,7 @@ import net.forwardfire.vasc.backend.data.MapVascEntryRecordCreator;
* @author Willem Cazander
* @version 1.0 Sep 5, 2008
*/
public class JdbcVascBackend extends AbstractVascBackend {
public class JdbcVascBackend extends AbstractVascBackend<HashMap<String,Object>> {
private JdbcConnectionProvider jdbcConnectionProvider = null;
private String sqlList = null;
@ -80,9 +79,9 @@ public class JdbcVascBackend extends AbstractVascBackend {
/**
* @see net.forwardfire.vasc.backend.VascBackend#execute(VascBackendState state)
*/
public List<Object> execute(VascBackendState state) throws VascBackendException {
public List<HashMap<String,Object>> execute(VascBackendState state) throws VascBackendException {
JdbcConnectionProvider prov = getJdbcConnectionProvider();
List<Object> result = new ArrayList<Object>(50);
List<HashMap<String,Object>> result = new ArrayList<HashMap<String,Object>>(50);
Connection connection = null;
try {
connection = prov.getJdbcConnection();
@ -91,7 +90,7 @@ public class JdbcVascBackend extends AbstractVascBackend {
ResultSet rs = s.getResultSet();
int cols = rs.getMetaData().getColumnCount();
while (rs.next()) {
Map<String,Object> map = new HashMap<String,Object>(cols);
HashMap<String,Object> map = new HashMap<String,Object>(cols);
for (int i=1;i<=cols;i++) {
String columnName = rs.getMetaData().getColumnName(i);
Object columnObject = rs.getObject(i);
@ -99,7 +98,7 @@ public class JdbcVascBackend extends AbstractVascBackend {
}
result.add(map);
}
} catch (Exception e) {
} catch (SQLException e) {
throw new VascBackendException(e);
} finally {
if (connection!=null) {
@ -115,34 +114,34 @@ public class JdbcVascBackend extends AbstractVascBackend {
/**
* @see net.forwardfire.vasc.backend.VascBackend#merge(java.lang.Object)
*/
public Object merge(Object object) throws VascBackendException {
public HashMap<String,Object> merge(HashMap<String,Object> object) throws VascBackendException {
return object;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#persist(java.lang.Object)
*/
public void persist(Object object) throws VascBackendException {
public void persist(HashMap<String,Object> object) throws VascBackendException {
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#delete(java.lang.Object)
*/
public void delete(Object object) throws VascBackendException {
public void delete(HashMap<String,Object> object) throws VascBackendException {
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#provideVascEntryFieldValue(net.forwardfire.vasc.core.VascEntryField)
*/
public VascEntryFieldValue provideVascEntryFieldValue() {
return new MapVascEntryFieldValue();
return new HashMapVascEntryFieldValue();
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#provideVascEntryRecordCreator(net.forwardfire.vasc.core.VascEntry)
*/
public VascEntryRecordCreator provideVascEntryRecordCreator() {
return new MapVascEntryRecordCreator();
return new HashMapVascEntryRecordCreator();
}
/**

View file

@ -25,29 +25,27 @@ package net.forwardfire.vasc.backend.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.forwardfire.vasc.backend.AbstractVascBackend;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascBackendState;
import net.forwardfire.vasc.backend.VascEntryFieldValue;
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
import net.forwardfire.vasc.backend.data.MapVascEntryFieldValue;
import net.forwardfire.vasc.backend.data.MapVascEntryRecordCreator;
import net.forwardfire.vasc.backend.data.HashMapVascEntryFieldValue;
import net.forwardfire.vasc.backend.data.HashMapVascEntryRecordCreator;
import net.forwardfire.vasc.xpql.query.QueryParameterValue;
/**
* JdbcVascBackendXpql jdbc vasc backend with xpql query support.
*
* @author Willem Cazander
* @version 1.0 Sep 5, 2008
*/
public class JdbcVascBackendXpql extends AbstractVascBackend {
public class JdbcVascBackendXpql extends AbstractVascBackend<HashMap<String,Object>> {
private JdbcConnectionProvider jdbcConnectionProvider = null;
@ -92,7 +90,7 @@ public class JdbcVascBackendXpql extends AbstractVascBackend {
/**
* @see net.forwardfire.vasc.backend.VascBackend#execute(VascBackendState state)
*/
public List<Object> execute(VascBackendState state) throws VascBackendException {
public List<HashMap<String,Object>> execute(VascBackendState state) throws VascBackendException {
// Copy parameters
for (String key:state.getDataParameterKeys()) {
Object value = state.getDataParameter(key);
@ -112,9 +110,9 @@ public class JdbcVascBackendXpql extends AbstractVascBackend {
q.execute();
ResultSet rs = q.getResultSet();
int cols = rs.getMetaData().getColumnCount();
List<Object> result = new ArrayList<Object>(50);
List<HashMap<String,Object>> result = new ArrayList<HashMap<String,Object>>(50);
while (rs.next()) {
Map<String,Object> map = new HashMap<String,Object>(cols);
HashMap<String,Object> map = new HashMap<String,Object>(cols);
for (int i=1;i<=cols;i++) {
String columnName = rs.getMetaData().getColumnName(i);
Object columnObject = rs.getObject(i);
@ -123,7 +121,7 @@ public class JdbcVascBackendXpql extends AbstractVascBackend {
result.add(map);
}
return result;
} catch (Exception e) {
} catch (SQLException e) {
throw new VascBackendException(e);
} finally {
if (c!=null) {
@ -138,33 +136,33 @@ public class JdbcVascBackendXpql extends AbstractVascBackend {
/**
* @see net.forwardfire.vasc.backend.VascBackend#merge(java.lang.Object)
*/
public Object merge(Object object) throws VascBackendException {
public HashMap<String,Object> merge(HashMap<String,Object> object) throws VascBackendException {
return object;
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#persist(java.lang.Object)
*/
public void persist(Object object) throws VascBackendException {
public void persist(HashMap<String,Object> object) throws VascBackendException {
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#delete(java.lang.Object)
*/
public void delete(Object object) throws VascBackendException {
public void delete(HashMap<String,Object> object) throws VascBackendException {
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#provideVascEntryFieldValue()
*/
public VascEntryFieldValue provideVascEntryFieldValue() {
return new MapVascEntryFieldValue();
return new HashMapVascEntryFieldValue();
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#provideVascEntryRecordCreator()
*/
public VascEntryRecordCreator provideVascEntryRecordCreator() {
return new MapVascEntryRecordCreator();
return new HashMapVascEntryRecordCreator();
}
}

View file

@ -22,6 +22,8 @@
package net.forwardfire.vasc.backends.jpa;
import java.io.Serializable;
import net.forwardfire.vasc.backend.AbstractVascBackend;
import net.forwardfire.vasc.backend.VascBackendException;
@ -33,7 +35,7 @@ import org.hibernate.Session;
* @author Willem Cazander
* @version 1.0 Mar 21, 2007
*/
abstract public class AbstractHibernateVascBackend extends AbstractVascBackend {
abstract public class AbstractHibernateVascBackend<DATA_OBJECT extends Serializable> extends AbstractVascBackend<DATA_OBJECT> {
/**
* Provides a hibernate session which is closed !! when transaction is compleeted.
@ -41,7 +43,7 @@ abstract public class AbstractHibernateVascBackend extends AbstractVascBackend
*/
abstract Session getHibernateSession();
public void persist(Object object) throws VascBackendException {
public void persist(DATA_OBJECT object) throws VascBackendException {
Session s = getHibernateSession();
try {
s.getTransaction().begin();
@ -57,11 +59,11 @@ abstract public class AbstractHibernateVascBackend extends AbstractVascBackend
}
}
public Object merge(Object object) throws VascBackendException {
public DATA_OBJECT merge(DATA_OBJECT object) throws VascBackendException {
Session s = getHibernateSession();
try {
s.getTransaction().begin();
Object result = s.merge(object);
DATA_OBJECT result = (DATA_OBJECT)s.merge(object);
s.getTransaction().commit();
return result;
} finally {
@ -74,7 +76,7 @@ abstract public class AbstractHibernateVascBackend extends AbstractVascBackend
}
}
public void delete(Object object) throws VascBackendException {
public void delete(DATA_OBJECT object) throws VascBackendException {
Session s = getHibernateSession();
try {
s.getTransaction().begin();

View file

@ -22,6 +22,8 @@
package net.forwardfire.vasc.backends.jpa;
import java.io.Serializable;
import javax.persistence.EntityManager;
import net.forwardfire.vasc.backend.AbstractVascBackend;
@ -32,13 +34,13 @@ import net.forwardfire.vasc.backend.VascBackendException;
* @author Willem Cazander
* @version 1.0 Mar 21, 2007
*/
abstract public class AbstractPersistenceVascBackend extends AbstractVascBackend {
abstract public class AbstractPersistenceVascBackend<DATA_OBJECT extends Serializable> extends AbstractVascBackend<DATA_OBJECT> {
protected boolean emTransaction = true;
abstract EntityManager getEntityManager();
public void persist(Object object) throws VascBackendException {
public void persist(DATA_OBJECT object) throws VascBackendException {
EntityManager s = getEntityManager();
try {
if (emTransaction) {
@ -55,13 +57,13 @@ abstract public class AbstractPersistenceVascBackend extends AbstractVascBackend
}
}
public Object merge(Object object) throws VascBackendException {
public DATA_OBJECT merge(DATA_OBJECT object) throws VascBackendException {
EntityManager s = getEntityManager();
try {
if (emTransaction) {
s.getTransaction().begin();
}
Object result = s.merge(object);
DATA_OBJECT result = (DATA_OBJECT)s.merge(object);
if (emTransaction) {
s.getTransaction().commit();
}
@ -73,7 +75,7 @@ abstract public class AbstractPersistenceVascBackend extends AbstractVascBackend
}
}
public void delete(Object object) throws VascBackendException {
public void delete(DATA_OBJECT object) throws VascBackendException {
EntityManager s = getEntityManager();
try {
if (emTransaction) {

View file

@ -22,6 +22,7 @@
package net.forwardfire.vasc.backends.jpa;
import java.io.Serializable;
import java.util.List;
import net.forwardfire.vasc.backend.VascBackendException;
@ -43,7 +44,7 @@ import org.hibernate.Session;
* @author Willem Cazander
* @version 1.0 Mar 17, 2009
*/
public class XpqlHibernateVascBackend extends AbstractHibernateVascBackend {
public class XpqlHibernateVascBackend<DATA_OBJECT extends Serializable> extends AbstractHibernateVascBackend<DATA_OBJECT> {
private HibernateSessionProvider hibernateSessionProvider = null;
@ -73,7 +74,7 @@ public class XpqlHibernateVascBackend extends AbstractHibernateVascBackend {
}
@SuppressWarnings("unchecked")
public List<Object> execute(VascBackendState state) throws VascBackendException {
public List<DATA_OBJECT> execute(VascBackendState state) throws VascBackendException {
// Copy parameters
for (String key:state.getDataParameterKeys()) {
@ -103,7 +104,7 @@ public class XpqlHibernateVascBackend extends AbstractHibernateVascBackend {
q.setFirstResult(state.getPageIndex()*state.getPageSize());
q.setMaxResults(state.getPageSize());
}
List<Object> data = q.list();
List<DATA_OBJECT> data = q.list();
s.getTransaction().commit();
return data;
} finally {

View file

@ -22,6 +22,7 @@
package net.forwardfire.vasc.backends.jpa;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
@ -43,7 +44,7 @@ import net.forwardfire.vasc.xpql.query.QueryParameterValue;
* @author Willem Cazander
* @version 1.0 Mar 17, 2009
*/
public class XpqlPersistanceVascBackend extends AbstractPersistenceVascBackend {
public class XpqlPersistanceVascBackend<DATA_OBJECT extends Serializable> extends AbstractPersistenceVascBackend<DATA_OBJECT> {
private EntityManagerProvider entityManagerProvider = null;
@ -76,7 +77,7 @@ public class XpqlPersistanceVascBackend extends AbstractPersistenceVascBackend
@SuppressWarnings("unchecked")
public List<Object> execute(VascBackendState state) throws VascBackendException {
public List<DATA_OBJECT> execute(VascBackendState state) throws VascBackendException {
// Copy parameters
for (String key:state.getDataParameterKeys()) {
@ -84,7 +85,7 @@ public class XpqlPersistanceVascBackend extends AbstractPersistenceVascBackend
//System.out.println("Set para pame: "+key+" value: "+value);
query.setQueryParameter(key, value);
if (queryTotal!=null) {
queryTotal.setQueryParameter(key, value);
queryTotal.setQueryParameter(key, value);
}
}
@ -106,7 +107,7 @@ public class XpqlPersistanceVascBackend extends AbstractPersistenceVascBackend
if (emTransaction) {
em.getTransaction().begin();
}
List<Object> data = q.getResultList();
List<DATA_OBJECT> data = q.getResultList();
if (emTransaction) {
em.getTransaction().commit();
}

View file

@ -34,8 +34,8 @@ import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascBackendState;
import net.forwardfire.vasc.backend.VascEntryFieldValue;
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
import net.forwardfire.vasc.backend.data.MapVascEntryFieldValue;
import net.forwardfire.vasc.backend.data.MapVascEntryRecordCreator;
import net.forwardfire.vasc.backend.data.HashMapVascEntryFieldValue;
import net.forwardfire.vasc.backend.data.HashMapVascEntryRecordCreator;
import com.novell.ldap.LDAPAttribute;
import com.novell.ldap.LDAPAttributeSet;
@ -52,7 +52,7 @@ import com.novell.ldap.LDAPSearchResults;
* @author Willem Cazander
* @version 1.0 Sep 4, 2008
*/
public class LdapVascBackend extends AbstractVascBackend {
public class LdapVascBackend extends AbstractVascBackend<HashMap<String,Object>> {
private Logger logger = Logger.getLogger(LdapVascBackend.class.getName());
private LdapConnectionProvider ldapConnectionProvider = null;
@ -80,10 +80,10 @@ public class LdapVascBackend extends AbstractVascBackend {
/**
* @see net.forwardfire.vasc.backend.VascBackend#execute()
*/
public List<Object> execute(VascBackendState state) throws VascBackendException {
public List<HashMap<String,Object>> execute(VascBackendState state) throws VascBackendException {
LdapConnectionProvider prov = getLdapConnectionProvider();
LDAPConnection connection = prov.getLdapConnection();
List<Object> result = new ArrayList<Object>(50);
List<HashMap<String,Object>> result = new ArrayList<HashMap<String,Object>>(50);
try {
LDAPSearchConstraints cons = new LDAPSearchConstraints();
@ -104,7 +104,7 @@ public class LdapVascBackend extends AbstractVascBackend {
while (searchResults.hasMore()) {
LDAPEntry entry = searchResults.next();
Map<String,Object> map = new HashMap<String,Object>(10);
HashMap<String,Object> map = new HashMap<String,Object>(10);
LDAPAttributeSet attributeSet = entry.getAttributeSet();
Iterator<LDAPAttribute> i = attributeSet.iterator();
@ -134,11 +134,10 @@ public class LdapVascBackend extends AbstractVascBackend {
/**
* @see net.forwardfire.vasc.backend.VascBackend#merge(java.lang.Object)
*/
public Object merge(Object object) throws VascBackendException {
public HashMap<String,Object> merge(HashMap<String,Object> map) throws VascBackendException {
LdapConnectionProvider prov = getLdapConnectionProvider();
LDAPConnection connection = prov.getLdapConnection();
try {
Map<String,Object> map = (Map)object;
String keyValue = (String)map.get(keyAttribute);
LDAPSearchConstraints cons = new LDAPSearchConstraints();
cons.setBatchSize( 0 );
@ -157,7 +156,7 @@ public class LdapVascBackend extends AbstractVascBackend {
if (searchResults.hasMore()==false) {
// no result to mod
return object;
return map;
}
LDAPEntry entry = searchResults.next();
List<LDAPModification> mods = new ArrayList<LDAPModification>(20);
@ -204,7 +203,7 @@ public class LdapVascBackend extends AbstractVascBackend {
m = mods.toArray(m);
connection.modify(entry.getDN(), m);
return object;
return map;
} catch (LDAPException e) {
throw new VascBackendException(e);
} finally {
@ -215,8 +214,7 @@ public class LdapVascBackend extends AbstractVascBackend {
/**
* @see net.forwardfire.vasc.backend.VascBackend#persist(java.lang.Object)
*/
public void persist(Object object) throws VascBackendException {
Map<String,Object> map = (Map)object;
public void persist(HashMap<String,Object> map) throws VascBackendException {
LdapConnectionProvider prov = getLdapConnectionProvider();
LDAPConnection connection = prov.getLdapConnection();
try {
@ -250,11 +248,10 @@ public class LdapVascBackend extends AbstractVascBackend {
/**
* @see net.forwardfire.vasc.backend.VascBackend#delete(java.lang.Object)
*/
public void delete(Object object) throws VascBackendException {
public void delete(HashMap<String,Object> map) throws VascBackendException {
LdapConnectionProvider prov = getLdapConnectionProvider();
LDAPConnection connection = prov.getLdapConnection();
try {
Map<String,Object> map = (Map)object;
String keyValue = (String)map.get(keyAttribute);
int searchScope = LDAPConnection.SCOPE_ONE;
String searchBase = baseDN;
@ -294,14 +291,14 @@ public class LdapVascBackend extends AbstractVascBackend {
* @see net.forwardfire.vasc.backend.VascBackend#provideVascEntryRecordCreator()
*/
public VascEntryRecordCreator provideVascEntryRecordCreator() {
return new MapVascEntryRecordCreator();
return new HashMapVascEntryRecordCreator();
}
/**
* @see net.forwardfire.vasc.backend.VascBackend#provideVascEntryFieldValue()
*/
public VascEntryFieldValue provideVascEntryFieldValue() {
return new MapVascEntryFieldValue();
return new HashMapVascEntryFieldValue();
}
/**

View file

@ -58,7 +58,7 @@ import net.forwardfire.vasc.backend.metamodel.crud.UpdateableRowMapImpl;
* @author Willem Cazander
* @version 1.0 Dec 31, 2011
*/
public class MetaModelVascBackend extends AbstractVascBackend {
public class MetaModelVascBackend extends AbstractVascBackend<Row> {
private Logger logger = Logger.getLogger(MetaModelVascBackend.class.getName());
private MetaModelDataContextProvider dataContextProvider = null;
@ -210,7 +210,7 @@ public class MetaModelVascBackend extends AbstractVascBackend {
return q;
}
public List<Object> execute(VascBackendState state) throws VascBackendException {
public List<Row> execute(VascBackendState state) throws VascBackendException {
Schema schema = dataContext.getDefaultSchema();
Table t = schema.getTableByName(table);
if (t==null) {
@ -236,16 +236,15 @@ public class MetaModelVascBackend extends AbstractVascBackend {
}
q.setMaxRows(state.getPageSize());
}
List<Row> result = new ArrayList<Row>(50);
if (crudDataContext!=null) {
DataSet ds = crudDataContext.executeQuery(q);
List<Object> result = new ArrayList<Object>(50);
result.addAll(ds.toRows());
ds.close();
return result;
}
DataSet ds = dataContext.executeQuery(q);
List<Object> result = new ArrayList<Object>(50);
while (ds.next()) {
Row row = ds.getRow();
SelectItem[] cols = row.getSelectItems();
@ -263,21 +262,21 @@ public class MetaModelVascBackend extends AbstractVascBackend {
return result;
}
public void persist(Object object) throws VascBackendException {
public void persist(Row object) throws VascBackendException {
if (crudDataContext==null) {
return;
}
crudDataContext.persist((UpdateableRow) object);
}
public Object merge(Object object) throws VascBackendException {
public Row merge(Row object) throws VascBackendException {
if (crudDataContext==null) {
return object;
}
return crudDataContext.merge((UpdateableRow) object);
}
public void delete(Object object) throws VascBackendException {
public void delete(Row object) throws VascBackendException {
if (crudDataContext==null) {
return;
}
@ -288,7 +287,7 @@ public class MetaModelVascBackend extends AbstractVascBackend {
return new RowVascEntryFieldValue();
}
public VascEntryRecordCreator provideVascEntryRecordCreator() {
public VascEntryRecordCreator<Row> provideVascEntryRecordCreator() {
return new RowVascEntryRecordCreator(crudDataContext,crudDataContext.getDefaultSchema().getTableByName(table));
}

View file

@ -1,13 +1,13 @@
package net.forwardfire.vasc.backend.metamodel;
import org.eobjects.metamodel.data.Row;
import org.eobjects.metamodel.schema.Table;
import net.forwardfire.vasc.backend.VascBackendException;
import net.forwardfire.vasc.backend.VascEntryRecordCreator;
import net.forwardfire.vasc.backend.metamodel.crud.CrudDataContext;
import net.forwardfire.vasc.backend.metamodel.crud.UpdateableRow;
public class RowVascEntryRecordCreator implements VascEntryRecordCreator {
public class RowVascEntryRecordCreator implements VascEntryRecordCreator<Row> {
private static final long serialVersionUID = -1182678362367989090L;
private CrudDataContext dataContext = null;
@ -17,12 +17,8 @@ public class RowVascEntryRecordCreator implements VascEntryRecordCreator {
this.dataContext=dataContext;
this.table=table;
}
public Class<?> getObjectClass() {
return UpdateableRow.class;
}
public Object newRecord() throws VascBackendException {
public Row newRecord() throws VascBackendException {
return dataContext.createRow(table);
}
}

View file

@ -48,6 +48,9 @@ abstract public class AbstractCrudDataContext implements CrudDataContext {
RowInsertionBuilder query = backendImpl.insertInto(row.getTable());
for (int i=0;i<row.size();i++) {
SelectItem si = row.getSelectItem(i);
if (si.getColumn().isPrimaryKey()) {
continue; // insert null will only work with correct default sequence attacted to column.
}
Object value = row.getValue(i);
query.value(si.getColumn(), value);
}
@ -56,7 +59,7 @@ abstract public class AbstractCrudDataContext implements CrudDataContext {
});
}
public Object merge(final UpdateableRow row) {
public UpdateableRow merge(final UpdateableRow row) {
for (String column:row.getPrimaryKeys()) {
if (row.getValue(column)==null) {
throw new IllegalStateException("Can't update row where primary key: "+column+" value is null.");

View file

@ -26,7 +26,7 @@ public interface CrudDataContext extends UpdateableDataContext {
/**
* Merges row with table.
*/
public Object merge(UpdateableRow row);
public UpdateableRow merge(UpdateableRow row);
/**
* Deletes row from table.

View file

@ -46,7 +46,7 @@ import com.mongodb.WriteResult;
* @author Willem Cazander
* @version 1.0 Dec 30, 2011
*/
public class MongodbVascBackend extends AbstractVascBackend {
public class MongodbVascBackend extends AbstractVascBackend<BasicDBObject> {
private Logger logger = null;
private MongodbConnectionProvider connectionProvider = null;
@ -105,7 +105,7 @@ public class MongodbVascBackend extends AbstractVascBackend {
return query;
}
public List<Object> execute(VascBackendState state) throws VascBackendException {
public List<BasicDBObject> execute(VascBackendState state) throws VascBackendException {
DBCollection coll = getDBCollection();
DBObject query = createFilterQuery(state);
DBCursor cur = coll.find(query);
@ -113,33 +113,32 @@ public class MongodbVascBackend extends AbstractVascBackend {
cur.limit(state.getPageSize());
cur.skip(state.getPageIndex());
}
List<Object> result = new ArrayList<Object>(cur.count());
List<BasicDBObject> result = new ArrayList<BasicDBObject>(cur.count());
while (cur.hasNext()) {
DBObject row = cur.next();
result.add(row);
result.add((BasicDBObject)row);
}
return result;
}
public void persist(Object object) throws VascBackendException {
public void persist(BasicDBObject object) throws VascBackendException {
DBCollection coll = getDBCollection();
coll.insert((DBObject)object);
coll.insert(object);
}
public Object merge(Object object) throws VascBackendException {
public BasicDBObject merge(BasicDBObject row) throws VascBackendException {
DBCollection coll = getDBCollection();
DBObject row = (DBObject)object;
DBObject query = new BasicDBObject();
query.put("_id",row.get("_id"));
WriteResult wr = coll.update(query,row,false,false,WriteConcern.SAFE);
logger.info("WriteResult: "+wr);
return object;
return row;
}
public void delete(Object object) throws VascBackendException {
public void delete(BasicDBObject object) throws VascBackendException {
DBCollection coll = getDBCollection();
DBObject query = new BasicDBObject();
query.put("_id",((DBObject)object).get("_id"));
query.put("_id",object.get("_id"));
coll.remove(query); // remove by _id
}
@ -147,7 +146,7 @@ public class MongodbVascBackend extends AbstractVascBackend {
return new MongodbVascEntryFieldValue();
}
public VascEntryRecordCreator provideVascEntryRecordCreator() {
public VascEntryRecordCreator<BasicDBObject> provideVascEntryRecordCreator() {
return new MongodbVascEntryRecordCreator();
}

View file

@ -34,15 +34,11 @@ import com.mongodb.BasicDBObject;
* @author Willem Cazander
* @version 1.0 Dec 30, 2011
*/
public class MongodbVascEntryRecordCreator implements VascEntryRecordCreator {
public class MongodbVascEntryRecordCreator implements VascEntryRecordCreator<BasicDBObject> {
private static final long serialVersionUID = -9213830731796787384L;
public Object newRecord() throws VascBackendException {
public BasicDBObject newRecord() throws VascBackendException {
return new BasicDBObject();
}
public Class<?> getObjectClass() {
return BasicDBObject.class;
}
}