use metamodel

This commit is contained in:
Athou
2013-04-12 10:44:41 +02:00
parent b459975522
commit edd2ec42c7
8 changed files with 56 additions and 68 deletions

View File

@@ -8,8 +8,8 @@ import javax.persistence.NoResultException;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.FeedCategory;
import com.commafeed.backend.model.FeedCategory_;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.frontend.utils.ModelFactory.MF;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.uaihebert.model.EasyCriteria; import com.uaihebert.model.EasyCriteria;
@@ -20,27 +20,27 @@ public class FeedCategoryDAO extends GenericDAO<FeedCategory> {
public List<FeedCategory> findAll(User user) { public List<FeedCategory> findAll(User user) {
EasyCriteria<FeedCategory> criteria = createCriteria(); EasyCriteria<FeedCategory> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getUser()), user); criteria.andEquals(FeedCategory_.user.getName(), user);
criteria.innerJoinFetch(MF.i(proxy().getUser())); criteria.innerJoinFetch(FeedCategory_.user.getName());
return criteria.getResultList(); return criteria.getResultList();
} }
public FeedCategory findById(User user, Long id) { public FeedCategory findById(User user, Long id) {
EasyCriteria<FeedCategory> criteria = createCriteria(); EasyCriteria<FeedCategory> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getUser()), user); criteria.andEquals(FeedCategory_.user.getName(), user);
criteria.andEquals(MF.i(proxy().getId()), id); criteria.andEquals(FeedCategory_.id.getName(), id);
return Iterables.getFirst(criteria.getResultList(), null); return Iterables.getFirst(criteria.getResultList(), null);
} }
public FeedCategory findByName(User user, String name, FeedCategory parent) { public FeedCategory findByName(User user, String name, FeedCategory parent) {
EasyCriteria<FeedCategory> criteria = createCriteria(); EasyCriteria<FeedCategory> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getUser()), user); criteria.andEquals(FeedCategory_.user.getName(), user);
criteria.andEquals(MF.i(proxy().getName()), name); criteria.andEquals(FeedCategory_.name.getName(), name);
if (parent == null) { if (parent == null) {
criteria.andIsNull(MF.i(proxy().getParent())); criteria.andIsNull(FeedCategory_.parent.getName());
} else { } else {
criteria.andEquals(MF.i(proxy().getParent()), parent); criteria.andEquals(FeedCategory_.parent.getName(), parent);
} }
FeedCategory category = null; FeedCategory category = null;

View File

@@ -14,7 +14,6 @@ import org.apache.commons.lang.time.DateUtils;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.Feed_; import com.commafeed.backend.model.Feed_;
import com.commafeed.frontend.utils.ModelFactory.MF;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.uaihebert.model.EasyCriteria; import com.uaihebert.model.EasyCriteria;
@@ -52,14 +51,14 @@ public class FeedDAO extends GenericDAO<Feed> {
} }
public Feed findByUrl(String url) { public Feed findByUrl(String url) {
List<Feed> feeds = findByField(MF.i(proxy().getUrl()), url); List<Feed> feeds = findByField(Feed_.url, url);
return Iterables.getFirst(feeds, null); return Iterables.getFirst(feeds, null);
} }
public Feed findByIdWithEntries(Long feedId, int offset, int limit) { public Feed findByIdWithEntries(Long feedId, int offset, int limit) {
EasyCriteria<Feed> criteria = createCriteria(); EasyCriteria<Feed> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getId()), feedId); criteria.andEquals(Feed_.id.getName(), feedId);
criteria.leftJoinFetch(MF.i(proxy().getEntries())); criteria.leftJoinFetch(Feed_.entries.getName());
criteria.setFirstResult(offset); criteria.setFirstResult(offset);
criteria.setMaxResults(limit); criteria.setMaxResults(limit);

View File

@@ -10,7 +10,6 @@ import javax.persistence.criteria.Root;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedEntry; import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.FeedEntry_; import com.commafeed.backend.model.FeedEntry_;
import com.commafeed.frontend.utils.ModelFactory.MF;
import com.uaihebert.model.EasyCriteria; import com.uaihebert.model.EasyCriteria;
@Stateless @Stateless
@@ -20,8 +19,8 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
public List<FeedEntry> findByGuids(List<String> guids) { public List<FeedEntry> findByGuids(List<String> guids) {
EasyCriteria<FeedEntry> criteria = createCriteria(); EasyCriteria<FeedEntry> criteria = createCriteria();
criteria.setDistinctTrue(); criteria.setDistinctTrue();
criteria.andStringIn(MF.i(proxy().getGuid()), guids); criteria.andStringIn(FeedEntry_.guid.getName(), guids);
criteria.leftJoinFetch(MF.i(proxy().getFeeds())); criteria.leftJoinFetch(FeedEntry_.feeds.getName());
return criteria.getResultList(); return criteria.getResultList();
} }

View File

@@ -21,11 +21,9 @@ import com.commafeed.backend.model.FeedEntryContent_;
import com.commafeed.backend.model.FeedEntryStatus; import com.commafeed.backend.model.FeedEntryStatus;
import com.commafeed.backend.model.FeedEntryStatus_; import com.commafeed.backend.model.FeedEntryStatus_;
import com.commafeed.backend.model.FeedEntry_; import com.commafeed.backend.model.FeedEntry_;
import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.FeedSubscription_; import com.commafeed.backend.model.FeedSubscription_;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserSettings.ReadingOrder; import com.commafeed.backend.model.UserSettings.ReadingOrder;
import com.commafeed.frontend.utils.ModelFactory.MF;
import com.google.api.client.util.Lists; import com.google.api.client.util.Lists;
import com.google.api.client.util.Maps; import com.google.api.client.util.Maps;
import com.uaihebert.model.EasyCriteria; import com.uaihebert.model.EasyCriteria;
@@ -37,13 +35,13 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
public FeedEntryStatus findById(User user, Long id) { public FeedEntryStatus findById(User user, Long id) {
EasyCriteria<FeedEntryStatus> criteria = createCriteria(); EasyCriteria<FeedEntryStatus> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getId()), id); criteria.andEquals(FeedEntryStatus_.id.getName(), id);
criteria.innerJoinFetch(MF.i(proxy().getSubscription())); criteria.innerJoinFetch(FeedEntryStatus_.subscription.getName());
criteria.innerJoinFetch(MF.i(proxy().getEntry())); criteria.innerJoinFetch(FeedEntryStatus_.entry.getName());
criteria.andJoinEquals(MF.i(proxy().getSubscription()), criteria.andJoinEquals(FeedEntryStatus_.subscription.getName(),
MF.i(MF.p(FeedSubscription.class).getUser()), user); FeedSubscription_.user.getName(), user);
FeedEntryStatus status = null; FeedEntryStatus status = null;
try { try {
@@ -54,8 +52,8 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
return status; return status;
} }
public List<FeedEntryStatus> findByKeywords(User user, public List<FeedEntryStatus> findByKeywords(User user, String keywords,
String keywords, int offset, int limit, boolean includeContent) { int offset, int limit, boolean includeContent) {
String joinedKeywords = StringUtils.join( String joinedKeywords = StringUtils.join(
keywords.toLowerCase().split(" "), "%"); keywords.toLowerCase().split(" "), "%");
@@ -136,8 +134,7 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
public List<FeedEntryStatus> findByFeed(Feed feed, User user, public List<FeedEntryStatus> findByFeed(Feed feed, User user,
boolean unreadOnly, ReadingOrder order, boolean includeContent) { boolean unreadOnly, ReadingOrder order, boolean includeContent) {
return findByFeed(feed, user, unreadOnly, -1, -1, order, return findByFeed(feed, user, unreadOnly, -1, -1, order, includeContent);
includeContent);
} }
public List<FeedEntryStatus> findByFeed(Feed feed, User user, public List<FeedEntryStatus> findByFeed(Feed feed, User user,
@@ -169,16 +166,16 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
return q.getResultList(); return q.getResultList();
} }
public List<FeedEntryStatus> findByCategories(List<FeedCategory> categories, public List<FeedEntryStatus> findByCategories(
User user, boolean unreadOnly, ReadingOrder order, List<FeedCategory> categories, User user, boolean unreadOnly,
boolean includeContent) { ReadingOrder order, boolean includeContent) {
return findByCategories(categories, user, unreadOnly, -1, -1, order, return findByCategories(categories, user, unreadOnly, -1, -1, order,
includeContent); includeContent);
} }
public List<FeedEntryStatus> findByCategories(List<FeedCategory> categories, public List<FeedEntryStatus> findByCategories(
User user, boolean unreadOnly, int offset, int limit, List<FeedCategory> categories, User user, boolean unreadOnly,
ReadingOrder order, boolean includeContent) { int offset, int limit, ReadingOrder order, boolean includeContent) {
CriteriaQuery<FeedEntryStatus> query = builder.createQuery(getType()); CriteriaQuery<FeedEntryStatus> query = builder.createQuery(getType());
Root<FeedEntryStatus> root = query.from(getType()); Root<FeedEntryStatus> root = query.from(getType());
@@ -225,14 +222,14 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
public void markCategoryEntries(User user, List<FeedCategory> categories, public void markCategoryEntries(User user, List<FeedCategory> categories,
Date olderThan) { Date olderThan) {
List<FeedEntryStatus> statuses = findByCategories(categories, user, true, List<FeedEntryStatus> statuses = findByCategories(categories, user,
ReadingOrder.desc, false); true, ReadingOrder.desc, false);
update(markList(statuses, olderThan)); update(markList(statuses, olderThan));
} }
public void markAllEntries(User user, Date olderThan) { public void markAllEntries(User user, Date olderThan) {
List<FeedEntryStatus> statuses = findAll(user, true, List<FeedEntryStatus> statuses = findAll(user, true, ReadingOrder.desc,
ReadingOrder.desc, false); false);
update(markList(statuses, olderThan)); update(markList(statuses, olderThan));
} }

View File

@@ -7,8 +7,8 @@ import javax.ejb.Stateless;
import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.FeedCategory;
import com.commafeed.backend.model.FeedSubscription; import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.FeedSubscription_;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.frontend.utils.ModelFactory.MF;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.uaihebert.factory.EasyCriteriaFactory; import com.uaihebert.factory.EasyCriteriaFactory;
import com.uaihebert.model.EasyCriteria; import com.uaihebert.model.EasyCriteria;
@@ -17,37 +17,35 @@ import com.uaihebert.model.EasyCriteria;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class FeedSubscriptionDAO extends GenericDAO<FeedSubscription> { public class FeedSubscriptionDAO extends GenericDAO<FeedSubscription> {
public FeedSubscription findById(User user, Long id) { public FeedSubscription findById(User user, Long id) {
EasyCriteria<FeedSubscription> criteria = createCriteria(); EasyCriteria<FeedSubscription> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getUser()), user); criteria.andEquals(FeedSubscription_.user.getName(), user);
criteria.andEquals(MF.i(proxy().getId()), id); criteria.andEquals(FeedSubscription_.id.getName(), id);
criteria.leftJoinFetch(MF.i(proxy().getFeed())); criteria.leftJoinFetch(FeedSubscription_.feed.getName());
criteria.leftJoinFetch(MF.i(proxy().getUser())); criteria.leftJoinFetch(FeedSubscription_.user.getName());
return Iterables.getFirst(criteria.getResultList(), null); return Iterables.getFirst(criteria.getResultList(), null);
} }
public List<FeedSubscription> findByFeed(Feed feed) { public List<FeedSubscription> findByFeed(Feed feed) {
EasyCriteria<FeedSubscription> criteria = createCriteria(); EasyCriteria<FeedSubscription> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getFeed()), feed); criteria.andEquals(FeedSubscription_.feed.getName(), feed);
return criteria.getResultList(); return criteria.getResultList();
} }
public FeedSubscription findByFeed(User user, Feed feed) { public FeedSubscription findByFeed(User user, Feed feed) {
EasyCriteria<FeedSubscription> criteria = createCriteria(); EasyCriteria<FeedSubscription> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getUser()), user); criteria.andEquals(FeedSubscription_.user.getName(), user);
criteria.andEquals(MF.i(proxy().getFeed()), feed); criteria.andEquals(FeedSubscription_.feed.getName(), feed);
return Iterables.getFirst(criteria.getResultList(), null); return Iterables.getFirst(criteria.getResultList(), null);
} }
public List<FeedSubscription> findAll(User user) { public List<FeedSubscription> findAll(User user) {
EasyCriteria<FeedSubscription> criteria = createCriteria(); EasyCriteria<FeedSubscription> criteria = createCriteria();
criteria.andEquals(MF.i(proxy().getUser()), user); criteria.andEquals(FeedSubscription_.user.getName(), user);
criteria.innerJoinFetch(MF.i(proxy().getFeed())); criteria.innerJoinFetch(FeedSubscription_.feed.getName());
criteria.innerJoinFetch(MF.i(proxy().getUser())); criteria.innerJoinFetch(FeedSubscription_.user.getName());
criteria.leftJoinFetch(MF.i(proxy().getCategory())); criteria.leftJoinFetch(FeedSubscription_.category.getName());
return criteria.getResultList(); return criteria.getResultList();
} }
@@ -55,8 +53,8 @@ public class FeedSubscriptionDAO extends GenericDAO<FeedSubscription> {
FeedCategory category) { FeedCategory category) {
EasyCriteria<FeedSubscription> criteria = EasyCriteriaFactory EasyCriteria<FeedSubscription> criteria = EasyCriteriaFactory
.createQueryCriteria(em, getType()); .createQueryCriteria(em, getType());
criteria.andEquals(MF.i(proxy().getUser()), user); criteria.andEquals(FeedSubscription_.user.getName(), user);
criteria.andEquals(MF.i(proxy().getCategory()), category); criteria.andEquals(FeedSubscription_.category.getName(), category);
return criteria.getResultList(); return criteria.getResultList();
} }
@@ -64,8 +62,8 @@ public class FeedSubscriptionDAO extends GenericDAO<FeedSubscription> {
public List<FeedSubscription> findWithoutCategories(User user) { public List<FeedSubscription> findWithoutCategories(User user) {
EasyCriteria<FeedSubscription> criteria = EasyCriteriaFactory EasyCriteria<FeedSubscription> criteria = EasyCriteriaFactory
.createQueryCriteria(em, getType()); .createQueryCriteria(em, getType());
criteria.andEquals(MF.i(proxy().getUser()), user); criteria.andEquals(FeedSubscription_.user.getName(), user);
criteria.andIsNull(MF.i(proxy().getCategory())); criteria.andIsNull(FeedSubscription_.category.getName());
return criteria.getResultList(); return criteria.getResultList();
} }

View File

@@ -11,10 +11,10 @@ import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import javax.persistence.metamodel.Attribute;
import com.commafeed.backend.model.AbstractModel; import com.commafeed.backend.model.AbstractModel;
import com.commafeed.backend.model.FeedEntryStatus; import com.commafeed.backend.model.FeedEntryStatus;
import com.commafeed.frontend.utils.ModelFactory.MF;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import com.uaihebert.factory.EasyCriteriaFactory; import com.uaihebert.factory.EasyCriteriaFactory;
import com.uaihebert.model.EasyCriteria; import com.uaihebert.model.EasyCriteria;
@@ -124,9 +124,9 @@ public abstract class GenericDAO<T extends AbstractModel> implements
return em.createQuery(query).getSingleResult(); return em.createQuery(query).getSingleResult();
} }
public List<T> findByField(String field, Object value) { public <V> List<T> findByField(Attribute<T, V> field, V value) {
EasyCriteria<T> criteria = createCriteria(); EasyCriteria<T> criteria = createCriteria();
criteria.andEquals(field, value); criteria.andEquals(field.getName(), value);
return criteria.getResultList(); return criteria.getResultList();
} }
@@ -148,9 +148,4 @@ public abstract class GenericDAO<T extends AbstractModel> implements
public EasyCriteria<T> createCriteria() { public EasyCriteria<T> createCriteria() {
return EasyCriteriaFactory.createQueryCriteria(em, getType()); return EasyCriteriaFactory.createQueryCriteria(em, getType());
} }
protected T proxy() {
return MF.p(getType());
}
} }

View File

@@ -8,7 +8,7 @@ import javax.ejb.Stateless;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserRole; import com.commafeed.backend.model.UserRole;
import com.commafeed.backend.model.UserRole.Role; import com.commafeed.backend.model.UserRole.Role;
import com.commafeed.frontend.utils.ModelFactory.MF; import com.commafeed.backend.model.UserRole_;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@@ -16,12 +16,12 @@ import com.google.common.collect.Sets;
public class UserRoleDAO extends GenericDAO<UserRole> { public class UserRoleDAO extends GenericDAO<UserRole> {
public List<UserRole> findAll(User user) { public List<UserRole> findAll(User user) {
return findByField(MF.i(MF.p(UserRole.class).getUser()), user); return findByField(UserRole_.user, user);
} }
public Set<Role> findRoles(User user) { public Set<Role> findRoles(User user) {
Set<Role> list = Sets.newHashSet(); Set<Role> list = Sets.newHashSet();
for (UserRole role : findByField(MF.i(proxy().getUser()), user)) { for (UserRole role : findByField(UserRole_.user, user)) {
list.add(role.getRole()); list.add(role.getRole());
} }
return list; return list;

View File

@@ -5,7 +5,7 @@ import javax.persistence.NoResultException;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserSettings; import com.commafeed.backend.model.UserSettings;
import com.commafeed.frontend.utils.ModelFactory.MF; import com.commafeed.backend.model.UserSettings_;
import com.uaihebert.factory.EasyCriteriaFactory; import com.uaihebert.factory.EasyCriteriaFactory;
import com.uaihebert.model.EasyCriteria; import com.uaihebert.model.EasyCriteria;
@@ -17,7 +17,7 @@ public class UserSettingsDAO extends GenericDAO<UserSettings> {
EasyCriteria<UserSettings> criteria = EasyCriteriaFactory EasyCriteria<UserSettings> criteria = EasyCriteriaFactory
.createQueryCriteria(em, getType()); .createQueryCriteria(em, getType());
criteria.andEquals(MF.i(proxy().getUser()), user); criteria.andEquals(UserSettings_.user.getName(), user);
UserSettings settings = null; UserSettings settings = null;
try { try {