package com.openseedbox.models;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import play.Logger;
import play.modules.siena.EnhancedModel;
import siena.Generator;
import siena.Id;
import siena.PersistenceManagerFactory;
import siena.jdbc.JdbcPersistenceManager;
public abstract class ModelBase extends EnhancedModel {
@Id(Generator.AUTO_INCREMENT)
protected long id = Long.MAX_VALUE;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public boolean isNew() {
return id == Long.MAX_VALUE;
}
public void insertOrUpdate() {
if (isNew()) {
this.insert();
} else {
this.update();
}
}
protected static ResultSet raw(String query) throws SQLException {
JdbcPersistenceManager m = (JdbcPersistenceManager) PersistenceManagerFactory.getPersistenceManager(ModelBase.class);
Method[] methods = m.getClass().getMethods();
Connection c = null;
//getConnection() is protected, so run it using reflection
for (Method me : methods) {
if (me.getName().equals("getConnection")) {
try {
c = (Connection) me.invoke(m);
} catch (Exception ex) {
if (ex instanceof SQLException) {
throw (SQLException) ex;
}
Logger.error("Error: %s", ex);
}
}
}
return c.createStatement().executeQuery(query);
}
/**
* siena.Model.save() is not auto increment safe with PostgreSQL! Use insertOrUpdate() instead!
*/
@Override
@Deprecated
public void save() {
insertOrUpdate();
}
}