| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 1 | package de.ids_mannheim.korap.dao; |
| 2 | |
| 3 | import javax.persistence.EntityManager; |
| 4 | import javax.persistence.NoResultException; |
| 5 | import javax.persistence.PersistenceContext; |
| 6 | import javax.persistence.Query; |
| 7 | import javax.persistence.criteria.CriteriaBuilder; |
| 8 | import javax.persistence.criteria.CriteriaQuery; |
| 9 | import javax.persistence.criteria.Root; |
| 10 | |
| 11 | import org.springframework.stereotype.Repository; |
| 12 | import org.springframework.transaction.annotation.Transactional; |
| 13 | |
| 14 | import de.ids_mannheim.korap.entity.DefaultSetting; |
| 15 | import de.ids_mannheim.korap.entity.DefaultSetting_; |
| 16 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| 17 | import de.ids_mannheim.korap.utils.ParameterChecker; |
| 18 | |
| margaretha | 6cd27f3 | 2019-01-24 14:47:47 +0100 | [diff] [blame] | 19 | /** |
| 20 | * DefaultSettingDao manages database queries and transactions |
| 21 | * regarding user default setting. |
| 22 | * |
| 23 | * @author margaretha |
| 24 | * |
| 25 | */ |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 26 | @Repository |
| 27 | public class DefaultSettingDao { |
| 28 | |
| 29 | @PersistenceContext |
| 30 | private EntityManager entityManager; |
| 31 | |
| 32 | /** |
| 33 | * Creates a new entry of default setting in the database. This |
| 34 | * method allows storing settings of an empty json object, i.e. |
| 35 | * {}. |
| 36 | * |
| 37 | * @param username |
| 38 | * username |
| 39 | * @param settings |
| 40 | * default settings in json |
| 41 | * @throws KustvaktException |
| 42 | */ |
| margaretha | d3a46ec | 2019-12-20 12:18:44 +0100 | [diff] [blame] | 43 | @Transactional |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 44 | public void createDefaultSetting (String username, String settings) |
| 45 | throws KustvaktException { |
| 46 | ParameterChecker.checkStringValue(username, "username"); |
| 47 | ParameterChecker.checkStringValue(settings, "settings"); |
| 48 | DefaultSetting us = new DefaultSetting(username, settings); |
| 49 | entityManager.persist(us); |
| 50 | } |
| 51 | |
| margaretha | d3a46ec | 2019-12-20 12:18:44 +0100 | [diff] [blame] | 52 | @Transactional |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 53 | public void updateDefaultSetting (DefaultSetting defaultSetting) |
| 54 | throws KustvaktException { |
| 55 | ParameterChecker.checkObjectValue(defaultSetting, "defaultSetting"); |
| 56 | entityManager.merge(defaultSetting); |
| 57 | } |
| 58 | |
| margaretha | d3a46ec | 2019-12-20 12:18:44 +0100 | [diff] [blame] | 59 | @Transactional |
| margaretha | b5e1e0a | 2019-01-29 22:11:57 +0100 | [diff] [blame] | 60 | public void deleteDefaultSetting (String username) |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 61 | throws KustvaktException { |
| margaretha | b5e1e0a | 2019-01-29 22:11:57 +0100 | [diff] [blame] | 62 | ParameterChecker.checkObjectValue(username, "defaultSetting"); |
| margaretha | 798e8bd | 2019-02-06 15:48:58 +0100 | [diff] [blame] | 63 | DefaultSetting defaultSetting = retrieveDefaultSetting(username); |
| margaretha | b5e1e0a | 2019-01-29 22:11:57 +0100 | [diff] [blame] | 64 | if (defaultSetting != null){ |
| 65 | entityManager.remove(defaultSetting); |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 66 | } |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 67 | } |
| 68 | |
| margaretha | 798e8bd | 2019-02-06 15:48:58 +0100 | [diff] [blame] | 69 | public DefaultSetting retrieveDefaultSetting (String username) |
| margaretha | 0866a53 | 2019-01-22 17:52:40 +0100 | [diff] [blame] | 70 | throws KustvaktException { |
| 71 | ParameterChecker.checkStringValue(username, "username"); |
| 72 | |
| 73 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); |
| 74 | CriteriaQuery<DefaultSetting> query = |
| 75 | criteriaBuilder.createQuery(DefaultSetting.class); |
| 76 | Root<DefaultSetting> defaultSetting = query.from(DefaultSetting.class); |
| 77 | |
| 78 | query.select(defaultSetting); |
| 79 | query.where(criteriaBuilder |
| 80 | .equal(defaultSetting.get(DefaultSetting_.username), username)); |
| 81 | Query q = entityManager.createQuery(query); |
| 82 | try { |
| 83 | return (DefaultSetting) q.getSingleResult(); |
| 84 | } |
| 85 | catch (NoResultException e) { |
| 86 | return null; |
| 87 | } |
| 88 | } |
| 89 | } |