package com.hdweiss.morgand.data.dao; import com.j256.ormlite.stmt.DeleteBuilder; import com.j256.ormlite.stmt.QueryBuilder; import com.j256.ormlite.stmt.Where; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class OrgNodeRepository { public static OrgNode queryForId(Integer id) { return DatabaseHelper.getOrgNodeDao().queryForId(id); } public static void update(OrgNode node) { if (node.state != OrgNode.State.Added) // Keep the added state when updating nodes node.state = OrgNode.State.Updated; DatabaseHelper.getOrgNodeDao().update(node); } public static void create(OrgNode node) { if (node.type != OrgNode.Type.Directory) // Directories should always have state=clean node.state = OrgNode.State.Added; DatabaseHelper.getOrgNodeDao().create(node); } public static void delete(OrgNode node) { if (node.type == OrgNode.Type.File || node.type == OrgNode.Type.Directory) deleteWithoutUpdate(node); else deleteWithUpdate(node); } private static void deleteWithUpdate(OrgNode node) { node.state = OrgNode.State.Deleted; DatabaseHelper.getOrgNodeDao().update(node); for(OrgNode child: node.children) deleteWithUpdate(child); } private static void deleteWithoutUpdate(OrgNode node) { for(OrgNode child: node.children) deleteWithoutUpdate(child); DatabaseHelper.getOrgNodeDao().delete(node); } public static QueryBuilder<OrgNode, Integer> queryBuilder() { return DatabaseHelper.getOrgNodeDao().queryBuilder(); } public static DeleteBuilder<OrgNode, Integer> deleteBuilder() { return DatabaseHelper.getOrgNodeDao().deleteBuilder(); } public static void deleteAll() { try { deleteBuilder().delete(); } catch (SQLException e) { e.printStackTrace(); } } public static int delete(OrgFile orgFile) throws SQLException { DeleteBuilder<OrgNode, Integer> deleteBuilder = deleteBuilder(); deleteBuilder.where().eq(OrgNode.FILE_FIELD_NAME, orgFile); return deleteBuilder.delete(); } public static List<OrgNode> getRootNodes() { try { List<OrgNode> children = queryBuilder().where().isNull(OrgNode.PARENT_FIELD_NAME).and().ne(OrgNode.STATE_FIELD_NAME, OrgNode.State.Deleted).query(); Collections.sort(children, new OrgNode.OrgNodeCompare()); return children; } catch (SQLException e) { e.printStackTrace(); } return new ArrayList<OrgNode>(); } public static List<OrgNode> getScheduledNodes(String filename, boolean showHabits) { try { Where<OrgNode, Integer> query = queryBuilder().where().eq(OrgNode.FILE_FIELD_NAME, filename); query.and().like(OrgNode.TITLE_FIELD_NAME, "%<%>%"); if (showHabits == false) query.and().not().like(OrgNode.TITLE_FIELD_NAME, "%:STYLE: habit%"); return query.query(); } catch (SQLException e) { e.printStackTrace(); } return new ArrayList<OrgNode>(); } public static List<OrgNode> getDirtyNodes(OrgFile file) throws SQLException { Where<OrgNode, Integer> builder = queryBuilder().orderBy(OrgNode.LINENUMBER_FIELD_NAME, false).where(); builder.eq(OrgNode.FILE_FIELD_NAME, file); builder.and().ne(OrgNode.STATE_FIELD_NAME, OrgNode.State.Clean); return builder.query(); } public static OrgNode getDefaultCaptureNode() { return new OrgNode(); // TODO } }