All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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