DbApi now has proper generic types signatured for Model-related functionality.

This commit is contained in:
Jonathan Bernard 2016-04-05 13:11:33 -05:00
parent 42960cb96e
commit 652cb178f3

View File

@ -34,7 +34,7 @@ public class DbApi {
public void shutdown() { dataSource.shutdown() } public void shutdown() { dataSource.shutdown() }
/// ### Common /// ### Common
public def getAll(Class modelClass, String orderClause = null) { public <M extends Model> List<M> getAll(Class<M> modelClass, String orderClause = null) {
def query = new StringBuilder() def query = new StringBuilder()
query.append('SELECT * FROM ') query.append('SELECT * FROM ')
.append(pluralize(nameFromModel(modelClass.simpleName))) .append(pluralize(nameFromModel(modelClass.simpleName)))
@ -46,19 +46,19 @@ public class DbApi {
logger.debug('Selecting models.\n\tSQL: {}', query) logger.debug('Selecting models.\n\tSQL: {}', query)
return sql.rows(query).collect { recordToModel(modelClass, it) } } return sql.rows(query).collect { recordToModel(modelClass, it) } }
public List<UUID> getAllIds(Class modelClass) { public List<UUID> getAllIds(Class<? extends Model> modelClass) {
String query = 'SELECT id FROM ' + String query = 'SELECT id FROM ' +
pluralize(nameFromModel(modelClass.simpleName)) pluralize(nameFromModel(modelClass.simpleName))
logger.debug('Selecting model ids.\n\tSQL: {}', query) logger.debug('Selecting model ids.\n\tSQL: {}', query)
return sql.rows(query).collect { it.id } } return sql.rows(query).collect { it.id } }
public Model getById(Class<? extends Model> modelClass, UUID id) { public <M extends Model> M getById(Class<M> modelClass, UUID id) {
def model = modelClass.newInstance() def model = modelClass.newInstance()
model.id = id model.id = id
return refresh(model) } return refresh(model) }
public List<Model> getByIdLike(Class<? extends Model> modelClass, public <M extends Model> List<M> getByIdLike(Class<M> modelClass,
String partialId) { String partialId) {
String likeVal = partialId + '%' String likeVal = partialId + '%'
String query = new StringBuilder() String query = new StringBuilder()
@ -72,7 +72,7 @@ public class DbApi {
return sql.rows(query, likeVal) return sql.rows(query, likeVal)
.collect { recordToModel(modelClass, it) } } .collect { recordToModel(modelClass, it) } }
public def refresh(def model) { public <M extends Model> M refresh(M model) {
def query = new StringBuilder() def query = new StringBuilder()
.append('SELECT * FROM ') .append('SELECT * FROM ')
.append(pluralize(nameFromModel(model.class.simpleName))) .append(pluralize(nameFromModel(model.class.simpleName)))
@ -84,7 +84,7 @@ public class DbApi {
if (!result) return null if (!result) return null
return updateModel(result, model) } return updateModel(result, model) }
public def getByName(Class modelClass, String name) { public <M extends Model> List<M> getByName(Class<M> modelClass, String name) {
def query = new StringBuilder() def query = new StringBuilder()
.append('SELECT * FROM ') .append('SELECT * FROM ')
.append(pluralize(nameFromModel(modelClass.simpleName))) .append(pluralize(nameFromModel(modelClass.simpleName)))
@ -94,8 +94,8 @@ public class DbApi {
logger.debug('Selecting model.\n\tSQL: {}\n\tPARAMS: {}', query, name) logger.debug('Selecting model.\n\tSQL: {}\n\tPARAMS: {}', query, name)
return sql.rows(query, [name]).collect { recordToModel(modelClass, it) } } return sql.rows(query, [name]).collect { recordToModel(modelClass, it) } }
public def getBy(Class modelClass, List<String> columns, public <M extends Model> List<M> getBy(Class<M> modelClass,
List<Object> values) { List<String> columns, List values) {
def query = new StringBuilder() def query = new StringBuilder()
.append('SELECT * FROM ') .append('SELECT * FROM ')
.append(pluralize(nameFromModel(modelClass.simpleName))) .append(pluralize(nameFromModel(modelClass.simpleName)))
@ -107,8 +107,8 @@ public class DbApi {
return sql.rows(query, values) return sql.rows(query, values)
.collect { recordToModel(modelClass, it) } } .collect { recordToModel(modelClass, it) } }
public def getLike(Class modelClass, List<String> columns, public <M extends Model> List<M> getLike(Class<M> modelClass,
List<Object> values) { List<String> columns, List values) {
values = values.collect { "%$it%".toString() } values = values.collect { "%$it%".toString() }
String query = new StringBuilder() String query = new StringBuilder()
.append('SELECT * FROM ') .append('SELECT * FROM ')
@ -121,7 +121,7 @@ public class DbApi {
return sql.rows(query, values) return sql.rows(query, values)
.collect { recordToModel(modelClass, it) } } .collect { recordToModel(modelClass, it) } }
public def getWhere(Class modelClass, Map criteria) { public <M extends Model> List<M> getWhere(Class<M> modelClass, Map criteria) {
switch(modelClass) { switch(modelClass) {
case Album: return getAlbumsWhere(criteria) case Album: return getAlbumsWhere(criteria)
case Artist: return getArtistsWhere(criteria) case Artist: return getArtistsWhere(criteria)
@ -130,11 +130,11 @@ public class DbApi {
case Playlist: return getPlaylistsWhere(criteria) case Playlist: return getPlaylistsWhere(criteria)
case Tag: return getTagsWhere(criteria) } } case Tag: return getTagsWhere(criteria) } }
public def save(def model) { public Model save(Model model) {
if (model.id) return update(model) if (model.id) return update(model)
else return create(model) } else return create(model) }
public def update(def model) { public Model update(Model model) {
def setClauses = [] def setClauses = []
def params = [] def params = []
@ -144,7 +144,7 @@ public class DbApi {
setClauses << '"' + nameFromModel(field.name) + '"= ?' setClauses << '"' + nameFromModel(field.name) + '"= ?'
params << field.get(model) } params << field.get(model) }
def query = new StringBuilder() String query = new StringBuilder()
.append('UPDATE ') .append('UPDATE ')
.append(pluralize(nameFromModel(model.class.simpleName))) .append(pluralize(nameFromModel(model.class.simpleName)))
.append(' SET ') .append(' SET ')
@ -159,7 +159,7 @@ public class DbApi {
sql.executeUpdate(query, params) sql.executeUpdate(query, params)
return refresh(model) } } return refresh(model) } }
public def create(def model) { public Model create(Model model) {
def columns = [] def columns = []
def params = [] def params = []
@ -183,7 +183,7 @@ public class DbApi {
sql.executeInsert(query, params) sql.executeInsert(query, params)
return model } return model }
public def delete(def model) { public int delete(Model model) {
def query = new StringBuilder() def query = new StringBuilder()
.append('DELETE FROM ') .append('DELETE FROM ')
.append(pluralize(nameFromModel(model.class.simpleName))) .append(pluralize(nameFromModel(model.class.simpleName)))
@ -195,8 +195,8 @@ public class DbApi {
sql.execute(query, [model.id]) sql.execute(query, [model.id])
return sql.updateCount } return sql.updateCount }
public def associate(Class modelClass1, Class modelClass2 , public def associate(Class<? extends Model> modelClass1,
UUID firstId, UUID secondId) { Class<? extends Model> modelClass2 , UUID firstId, UUID secondId) {
String linkTable = pluralize(nameFromModel(modelClass1.simpleName)) + String linkTable = pluralize(nameFromModel(modelClass1.simpleName)) +
'_' + pluralize(nameFromModel(modelClass2.simpleName)) '_' + pluralize(nameFromModel(modelClass2.simpleName))
String col1 = nameFromModel(modelClass1.simpleName) + '_id' String col1 = nameFromModel(modelClass1.simpleName) + '_id'
@ -218,7 +218,7 @@ public class DbApi {
query, params) query, params)
return sql.execute(query, params) } } } return sql.execute(query, params) } } }
public def associate(def m1, def m2) { public def associate(Model m1, Model m2) {
return associate(m1.class, m2.class, m1.id, m2.id) } return associate(m1.class, m2.class, m1.id, m2.id) }
/// ### Album-specific methods /// ### Album-specific methods
@ -905,7 +905,7 @@ public class DbApi {
field.set(model, record[nameFromModel(field.name)]) } field.set(model, record[nameFromModel(field.name)]) }
return model } return model }
static def recordToModel(Class modelClass, def record) { static <M extends Model> M recordToModel(Class<M> modelClass, def record) {
if (record == null) return null if (record == null) return null
def model = modelClass.newInstance() def model = modelClass.newInstance()
@ -915,7 +915,7 @@ public class DbApi {
return model } return model }
static def modelToRecord(def model) { static def modelToRecord(Model model) {
if (model == null) return null if (model == null) return null
def record = [:] def record = [:]