package fr.ydelouis.selfoss.model;
import com.j256.ormlite.dao.BaseDaoImpl;
import com.j256.ormlite.stmt.DeleteBuilder;
import com.j256.ormlite.stmt.Where;
import com.j256.ormlite.support.ConnectionSource;
import java.sql.SQLException;
import java.util.List;
import fr.ydelouis.selfoss.entity.Article;
import fr.ydelouis.selfoss.sync.ArticleSyncAction;
public class ArticleSyncActionDao extends BaseDaoImpl<ArticleSyncAction, Integer> {
public static final String COLUMN_ARTICLEID = "articleId";
public static final String COLUMN_ACTION = "action";
public ArticleSyncActionDao(ConnectionSource connectionSource) throws SQLException {
super(connectionSource, ArticleSyncAction.class);
}
@Override
public List<ArticleSyncAction> queryForAll() {
try {
return super.queryForAll();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public List<ArticleSyncAction> queryForMarkRead() {
try {
return queryBuilder().where().eq(COLUMN_ACTION, ArticleSyncAction.Action.MarkRead).query();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public ArticleSyncAction queryForArticle(Article article) {
try {
return queryBuilder().where().eq(COLUMN_ARTICLEID, article.getId()).queryForFirst();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void markRead(Article article) {
try {
deleteMarkReadAndUnread(article);
create(new ArticleSyncAction(article, ArticleSyncAction.Action.MarkRead));
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void markUnread(Article article) {
try {
deleteMarkReadAndUnread(article);
create(new ArticleSyncAction(article, ArticleSyncAction.Action.MarkUnread));
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void markStarred(Article article) {
try {
deleteMarkStarredAndUnStarred(article);
create(new ArticleSyncAction(article, ArticleSyncAction.Action.MarkStarred));
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void markUnstarred(Article article) {
try {
deleteMarkStarredAndUnStarred(article);
create(new ArticleSyncAction(article, ArticleSyncAction.Action.MarkUnstarred));
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Override
public int delete(ArticleSyncAction data) {
try {
return super.delete(data);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public int deleteMarkRead() {
try {
DeleteBuilder<ArticleSyncAction, Integer> deleteBuilder = deleteBuilder();
deleteBuilder.where().eq(COLUMN_ACTION, ArticleSyncAction.Action.MarkRead);
return deleteBuilder.delete();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
public int deleteMarkReadAndUnread(Article article) {
try {
DeleteBuilder<ArticleSyncAction, Integer> deleteBuilder = deleteBuilder();
Where<ArticleSyncAction, Integer> where = deleteBuilder.where();
where.and(where.eq(COLUMN_ARTICLEID, article.getId()),
where.eq(COLUMN_ACTION, ArticleSyncAction.Action.MarkRead)
.or().eq(COLUMN_ACTION, ArticleSyncAction.Action.MarkUnread));
return deleteBuilder.delete();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@SuppressWarnings("unchecked")
public int deleteMarkStarredAndUnStarred(Article article) {
try {
DeleteBuilder<ArticleSyncAction, Integer> deleteBuilder = deleteBuilder();
Where<ArticleSyncAction, Integer> where = deleteBuilder.where();
where.and(where.eq(COLUMN_ARTICLEID, article.getId()),
where.eq(COLUMN_ACTION, ArticleSyncAction.Action.MarkStarred)
.or().eq(COLUMN_ACTION, ArticleSyncAction.Action.MarkUnstarred));
return deleteBuilder.delete();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}