package se.slide.timy.db; import android.content.Context; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.stmt.QueryBuilder; import se.slide.timy.model.Category; import se.slide.timy.model.Color; import se.slide.timy.model.Project; import se.slide.timy.model.Report; import java.sql.SQLException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; public class DatabaseManager { static private DatabaseManager instance; private DatabaseHelper helper; static public void init(Context ctx) { if (instance == null) { instance = new DatabaseManager(ctx); } } static public DatabaseManager getInstance() { return instance; } private DatabaseManager(Context ctx) { helper = new DatabaseHelper(ctx); } private DatabaseHelper getHelper() { return helper; } public List<Project> getAllProjects() { List<Project> projects = null; try { projects = getHelper().getProjectDao().queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return projects; } public List<Project> getAllProjects(int categoryId) { List<Project> projects = null; try { projects = getHelper().getProjectDao().query( getHelper().getProjectDao().queryBuilder().where() .eq("belongsToCategoryId", categoryId).and().eq("active", true) .prepare()); // alertLists = // getHelper().getAlertDao().query(getHelper().getAlertDao().queryBuilder().where().like("level", // "warning").and().ge("timeStamp", // timestamp).and().eq("clearedTimesStamp", -1).prepare()); } catch (SQLException e) { e.printStackTrace(); } return projects; } public List<Project> getProject(String name) { List<Project> projects = null; try { projects = getHelper().getProjectDao().query( getHelper().getProjectDao().queryBuilder().where().eq("name", name).and() .eq("active", false).prepare()); } catch (SQLException e) { e.printStackTrace(); } return projects; } public List<Project> getProject(int id) { List<Project> projects = null; try { projects = getHelper().getProjectDao().query( getHelper().getProjectDao().queryBuilder().where().eq("id", id).prepare()); } catch (SQLException e) { e.printStackTrace(); } return projects; } public void addProject(Project f) { try { getHelper().getProjectDao().createOrUpdate(f); } catch (SQLException e) { e.printStackTrace(); } } public void updateProject(Project f) { try { getHelper().getProjectDao().update(f); } catch (SQLException e) { e.printStackTrace(); } } public void deleteProject(Project f) { try { getHelper().getProjectDao().delete(f); } catch (SQLException e) { e.printStackTrace(); } } public void deleteProjectAndItsReports(Project f) { try { List<Report> reports = getAllReports(f.getId()); getHelper().getReportDao().delete(reports); getHelper().getProjectDao().delete(f); } catch (SQLException e) { e.printStackTrace(); } } public List<Category> getAllCategories() { List<Category> categoryLists = null; try { categoryLists = getHelper().getCategoryDao().queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return categoryLists; } public List<Category> getAllActiveCategories() { List<Category> categoryLists = null; try { categoryLists = getHelper().getCategoryDao().query( getHelper().getCategoryDao().queryBuilder().where().eq("active", true) .prepare()); } catch (SQLException e) { e.printStackTrace(); } return categoryLists; } public List<Category> getCategory(int id) { List<Category> categories = null; try { categories = getHelper().getCategoryDao().query( getHelper().getCategoryDao().queryBuilder().where().eq("id", id).prepare()); } catch (SQLException e) { e.printStackTrace(); } return categories; } public List<Category> getCategory(String name) { List<Category> categories = null; try { categories = getHelper().getCategoryDao().query( getHelper().getCategoryDao().queryBuilder().where().eq("name", name).and() .eq("active", false).prepare()); } catch (SQLException e) { e.printStackTrace(); } return categories; } public void addCategory(Category f) { try { getHelper().getCategoryDao().create(f); } catch (SQLException e) { e.printStackTrace(); } } public void addOrUpdate(Category f) { try { getHelper().getCategoryDao().createOrUpdate(f); } catch (SQLException e) { e.printStackTrace(); } } public void updateCategory(Category f) { try { getHelper().getCategoryDao().update(f); } catch (SQLException e) { e.printStackTrace(); } } public void deleteCategory(Category f) { try { getHelper().getCategoryDao().delete(f); } catch (SQLException e) { e.printStackTrace(); } } public void deleteCategoryAndItsProjects(Category f) { try { List<Project> projects = getAllProjects(f.getId()); for (Project project : projects) deleteProjectAndItsReports(project); getHelper().getCategoryDao().delete(f); } catch (SQLException e) { e.printStackTrace(); } } public List<Report> getAllReports() { List<Report> reportLists = null; try { reportLists = getHelper().getReportDao().queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return reportLists; } public List<Project> getProjectsWithUnsyncedReports() { List<Project> projects = null; try { List<Report> reports = getHelper().getReportDao().queryBuilder().where() .eq("googleCalendarSync", false).query(); List<Integer> reportIds = new ArrayList<Integer>(); for (int i = 0; i < reports.size(); i++) { reportIds.add(reports.get(i).getProjectId()); } QueryBuilder<Project, Integer> builderProject = getHelper().getProjectDao() .queryBuilder(); builderProject.where().in("id", reportIds); projects = builderProject.query(); for (int a = 0; a < projects.size(); a++) { Project project = projects.get(a); for (int b = 0; b < reports.size(); b++) { Report report = reports.get(b); if (report.getProjectId() == project.getId()) project.addReport(report); } } } catch (SQLException e) { e.printStackTrace(); } return projects; } public List<Report> getAllReports(int projectId) { List<Report> reportLists = null; try { reportLists = getHelper().getReportDao().query( getHelper().getReportDao().queryBuilder().where().eq("projectId", projectId) .prepare()); } catch (SQLException e) { e.printStackTrace(); } return reportLists; } public boolean haveUnsyncedReports() { List<Report> reports = null; try { reports = getHelper().getReportDao().query( getHelper().getReportDao().queryBuilder().where() .eq("googleCalendarSync", false).prepare()); } catch (SQLException e) { e.printStackTrace(); } if (reports == null || reports.size() < 1) return false; else return true; } public List<Report> getReport(int projectId, Date date) { List<Report> reports = null; try { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.MILLISECOND, 0); Date startDay = cal.getTime(); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.MILLISECOND, 999); Date endDate = cal.getTime(); reports = getHelper().getReportDao().query( getHelper().getReportDao().queryBuilder().where().ge("date", startDay).and() .le("date", endDate).and().eq("projectId", projectId).prepare()); } catch (SQLException e) { e.printStackTrace(); } return reports; } public void addReport(Report f) { try { getHelper().getReportDao().create(f); } catch (SQLException e) { e.printStackTrace(); } } public void addOrUpdateReport(Report f) { try { getHelper().getReportDao().createOrUpdate(f); } catch (SQLException e) { e.printStackTrace(); } } public void updateReport(Report f) { try { getHelper().getReportDao().update(f); } catch (SQLException e) { e.printStackTrace(); } } public void deleteReport(Report f) { try { getHelper().getReportDao().delete(f); } catch (SQLException e) { e.printStackTrace(); } } public void saveColors(List<Color> colors) { try { for (int i = 0; i < colors.size(); i++) { Color color = colors.get(i); getHelper().getColorsDao().createOrUpdate(color); } } catch (SQLException e) { e.printStackTrace(); } } public List<Color> getColors() { List<Color> colors = null; try { colors = getHelper().getColorsDao().queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return colors; } public List<Color> getColor(String colorId) { if (colorId == null || colorId.length() < 1) return new ArrayList<Color>(); List<Color> colors = null; try { colors = getHelper().getColorsDao().query( getHelper().getColorsDao().queryBuilder().where().eq("id", colorId).prepare()); } catch (SQLException e) { e.printStackTrace(); } return colors; } }