package org.flisolsaocarlos.flisolapp.provider.impl;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import org.flisolsaocarlos.flisolapp.model.Software;
import org.flisolsaocarlos.flisolapp.provider.DatabaseContract.EditionColumns;
import org.flisolsaocarlos.flisolapp.provider.DatabaseContract.InstallFestColumns;
import org.flisolsaocarlos.flisolapp.provider.DatabaseContract.SoftwareColumns;
import org.flisolsaocarlos.flisolapp.provider.DatabaseContract.Tables;
import org.flisolsaocarlos.flisolapp.provider.DatabaseHelper;
import org.flisolsaocarlos.flisolapp.provider.SoftwareDao;
import org.flisolsaocarlos.flisolapp.service.ApplicationService;
import java.util.ArrayList;
import java.util.List;
public class SoftwareDaoImpl implements SoftwareDao {
final static String TAG = SoftwareDaoImpl.class.getName();
private SQLiteDatabase database;
public SoftwareDaoImpl() {
DatabaseHelper databaseHelper = ApplicationService.getInstance().getDatabaseHelper();
database = databaseHelper.getWritableDatabase();
}
@Override
public List<Software> findAll() {
List<Software> softwares = new ArrayList<Software>();
Cursor cursor = database.query(Tables.SOFTWARE, null, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Software software = cursorToSoftware(cursor);
softwares.add(software);
cursor.moveToNext();
}
cursor.close();
return softwares;
}
@Override
public List<Software> findByYear(int year) {
List<Software> softwares = new ArrayList<Software>();
final String query = "SELECT s.* FROM " + Tables.EDITION + " e"
+ " INNER JOIN " + Tables.INSTALL_FEST + " i"
+ " ON e." + EditionColumns.ID + " = i." + InstallFestColumns.EDITION
+ " JOIN " + Tables.SOFTWARE + " s"
+ " ON s." + SoftwareColumns.INSTALL_FEST + " = i." + InstallFestColumns.ID
+ " WHERE e." + EditionColumns.YEAR + " = ? "
+ " ORDER BY " + SoftwareColumns.NAME;
final Cursor cursor = database.rawQuery(query, new String[]{String.valueOf(year)});
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Software software = cursorToSoftware(cursor);
softwares.add(software);
cursor.moveToNext();
}
cursor.close();
return softwares;
}
private Software cursorToSoftware(Cursor cursor) {
Software software = new Software();
software.setId(cursor.getInt(0));
software.setName(cursor.getString(1));
software.setWebsite(cursor.getString(2));
software.setNotes(cursor.getString(3));
software.setCategory(cursor.getString(4));
software.setVersion(cursor.getString(5));
return software;
}
}