
fr.lteconsulting.hexa.client.sql.BaseSQLiteDAO Maven / Gradle / Ivy
The newest version!
package fr.lteconsulting.hexa.client.sql;
import java.util.List;
import com.google.gwt.core.client.JavaScriptObject;
import fr.lteconsulting.hexa.classinfo.ClassInfo;
import fr.lteconsulting.hexa.classinfo.Clazz;
import fr.lteconsulting.hexa.client.sql.SqlParser.SqlParseInfo;
import fr.lteconsulting.hexa.client.tools.Action;
import fr.lteconsulting.hexa.shared.dto.PagedResults;
public abstract class BaseSQLiteDAO
{
protected Clazz clazz;
protected SQLite db;
protected Action requestSaveAction;
protected abstract T recordFactory();
public BaseSQLiteDAO( Class clazzz, SQLite db )
{
this( clazzz, db, null );
}
public BaseSQLiteDAO( Class clazzz, SQLite db, Action requestSaveAction )
{
clazz = ClassInfo.Clazz( clazzz );
if( clazz == null )
throw new IllegalArgumentException( "Classe non prise en charge par ClassInfo : " + clazzz.getName() );
this.db = db;
this.requestSaveAction = requestSaveAction;
}
public List getRecords()
{
String request = "select {" + clazz.getClassName() + "} from " + clazz.getClassName() + " order by id";
SqlParser parser = new SqlParser();
SqlParseInfo pi = parser.parse( request );
JavaScriptObject results = db.execute( parser.getSql( pi ) );
SQLiteResult sqliteR = new SQLiteResult( results );
List records = parser.parseResults( pi, sqliteR, clazz.getReflectedClass() );
return records;
}
public PagedResults getRecordsPaged( int offset, int pageSize )
{
String request = "select {" + clazz.getClassName() + "} from " + clazz.getClassName() + " order by id limit " + offset + "," + pageSize;
SqlParser parser = new SqlParser();
SqlParseInfo pi = parser.parse( request );
JavaScriptObject results = db.execute( parser.getSql( pi ) );
SQLiteResult sqliteR = new SQLiteResult( results );
List customers = parser.parseResults( pi, sqliteR, clazz.getReflectedClass() );
results = db.execute( "select count(*) from " + clazz.getClassName() );
sqliteR = new SQLiteResult( results );
int count = 0;
try
{
for( SQLiteResult.Row row : sqliteR )
for( SQLiteResult.Cell cell : row )
{
count = Integer.parseInt( cell.value );
break;
}
}
catch( Exception e )
{
}
PagedResults res = new PagedResults();
res.results = customers;
res.offset = offset;
res.totalNumberResults = count;
return res;
}
public T getRecord( int id )
{
T record = SqlHelper.find( db, clazz.getReflectedClass(), id );
return record;
}
public T updateRecord( T record )
{
SqlHelper.update( db, record );
if( requestSaveAction != null )
requestSaveAction.exec();
return record;
}
public boolean deleteRecord( int id )
{
SqlHelper.delete( db, clazz.getReflectedClass(), id );
if( requestSaveAction != null )
requestSaveAction.exec();
return true;
}
public T createRecord()
{
T record = recordFactory();
SqlHelper.insert( db, record );
if( requestSaveAction != null )
requestSaveAction.exec();
return record;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy