package fi.otavanopisto.muikku.plugins.schooldatalocal.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fi.otavanopisto.muikku.plugins.schooldatalocal.model.LocalUserProperty_;
import fi.otavanopisto.muikku.plugins.CorePluginsDAO;
import fi.otavanopisto.muikku.plugins.schooldatalocal.model.LocalUser;
import fi.otavanopisto.muikku.plugins.schooldatalocal.model.LocalUserProperty;
import fi.otavanopisto.muikku.plugins.schooldatalocal.model.LocalUserPropertyKey;
public class LocalUserPropertyDAO extends CorePluginsDAO<LocalUserProperty> {
private static final long serialVersionUID = 3991708024830906112L;
public LocalUserProperty create(LocalUser user, LocalUserPropertyKey key, String value) {
LocalUserProperty localUserProperty = new LocalUserProperty();
localUserProperty.setUser(user);
localUserProperty.setKey(key);
localUserProperty.setValue(value);
return persist(localUserProperty);
}
public LocalUserProperty findByUserAndKey(LocalUser user, LocalUserPropertyKey key) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<LocalUserProperty> criteria = criteriaBuilder.createQuery(LocalUserProperty.class);
Root<LocalUserProperty> root = criteria.from(LocalUserProperty.class);
criteria.select(root);
criteria.where(
criteriaBuilder.and(
criteriaBuilder.equal(root.get(LocalUserProperty_.user), user),
criteriaBuilder.equal(root.get(LocalUserProperty_.key), key)
)
);
return getSingleResult(entityManager.createQuery(criteria));
}
public List<LocalUserProperty> listByUser(LocalUser user) {
EntityManager entityManager = getEntityManager();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<LocalUserProperty> criteria = criteriaBuilder.createQuery(LocalUserProperty.class);
Root<LocalUserProperty> root = criteria.from(LocalUserProperty.class);
criteria.select(root);
criteria.where(
criteriaBuilder.equal(root.get(LocalUserProperty_.user), user)
);
return entityManager.createQuery(criteria).getResultList();
}
public LocalUserProperty updateValue(LocalUserProperty localUserProperty, String value) {
localUserProperty.setValue(value);
return persist(localUserProperty);
}
public void delete(LocalUserProperty localUserProperty) {
super.delete(localUserProperty);
}
}