| margaretha | 38d530e | 2017-07-11 19:06:50 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.dao; |
| 2 | |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 3 | import java.util.List; |
| margaretha | 2c50c73 | 2018-10-17 18:48:52 +0200 | [diff] [blame] | 4 | import java.util.Set; |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 5 | |
| margaretha | 6e79684 | 2023-08-17 15:10:45 +0200 | [diff] [blame] | 6 | import jakarta.persistence.EntityManager; |
| 7 | import jakarta.persistence.NoResultException; |
| 8 | import jakarta.persistence.PersistenceContext; |
| 9 | import jakarta.persistence.Query; |
| 10 | import jakarta.persistence.TypedQuery; |
| 11 | import jakarta.persistence.criteria.CriteriaBuilder; |
| 12 | import jakarta.persistence.criteria.CriteriaQuery; |
| 13 | import jakarta.persistence.criteria.Root; |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 14 | |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 15 | import org.springframework.stereotype.Repository; |
| margaretha | 2c50c73 | 2018-10-17 18:48:52 +0200 | [diff] [blame] | 16 | import org.springframework.transaction.annotation.Transactional; |
| margaretha | 38d530e | 2017-07-11 19:06:50 +0200 | [diff] [blame] | 17 | |
| margaretha | 5b70879 | 2023-05-12 16:55:29 +0200 | [diff] [blame] | 18 | import de.ids_mannheim.korap.core.entity.AnnotationLayer; |
| 19 | import de.ids_mannheim.korap.core.entity.Resource; |
| 20 | import de.ids_mannheim.korap.core.entity.Resource_; |
| margaretha | 2c50c73 | 2018-10-17 18:48:52 +0200 | [diff] [blame] | 21 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| 22 | import de.ids_mannheim.korap.utils.ParameterChecker; |
| margaretha | 38d530e | 2017-07-11 19:06:50 +0200 | [diff] [blame] | 23 | |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 24 | /** |
| 25 | * ResourceDao manages SQL queries regarding resource info and layers. |
| margaretha | 38d530e | 2017-07-11 19:06:50 +0200 | [diff] [blame] | 26 | * |
| 27 | * @author margaretha |
| 28 | * |
| 29 | */ |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 30 | @Repository |
| margaretha | 38d530e | 2017-07-11 19:06:50 +0200 | [diff] [blame] | 31 | public class ResourceDao { |
| 32 | |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 33 | @PersistenceContext |
| 34 | private EntityManager entityManager; |
| margaretha | d3c0fc9 | 2017-10-25 15:03:32 +0200 | [diff] [blame] | 35 | |
| margaretha | 2c50c73 | 2018-10-17 18:48:52 +0200 | [diff] [blame] | 36 | /** |
| 37 | * Select all from the resource table |
| 38 | * |
| margaretha | e353dfa | 2017-07-18 19:23:29 +0200 | [diff] [blame] | 39 | * @return a list of resources |
| 40 | */ |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 41 | public List<Resource> getAllResources () { |
| 42 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 43 | CriteriaQuery<Resource> query = criteriaBuilder |
| 44 | .createQuery(Resource.class); |
| margaretha | e353dfa | 2017-07-18 19:23:29 +0200 | [diff] [blame] | 45 | Root<Resource> resource = query.from(Resource.class); |
| margaretha | e353dfa | 2017-07-18 19:23:29 +0200 | [diff] [blame] | 46 | query.select(resource); |
| margaretha | 0c18622 | 2018-10-22 17:48:33 +0200 | [diff] [blame] | 47 | |
| 48 | TypedQuery<Resource> q = entityManager.createQuery(query); |
| margaretha | 543f200 | 2017-07-14 00:27:15 +0200 | [diff] [blame] | 49 | return q.getResultList(); |
| margaretha | 38d530e | 2017-07-11 19:06:50 +0200 | [diff] [blame] | 50 | } |
| margaretha | 2c50c73 | 2018-10-17 18:48:52 +0200 | [diff] [blame] | 51 | |
| 52 | public Resource retrieveResource (String id) { |
| 53 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 54 | CriteriaQuery<Resource> query = criteriaBuilder |
| 55 | .createQuery(Resource.class); |
| margaretha | 2c50c73 | 2018-10-17 18:48:52 +0200 | [diff] [blame] | 56 | Root<Resource> resource = query.from(Resource.class); |
| 57 | query.select(resource); |
| 58 | query.where(criteriaBuilder.equal(resource.get(Resource_.id), id)); |
| 59 | |
| 60 | Query q = entityManager.createQuery(query); |
| margaretha | 0c18622 | 2018-10-22 17:48:33 +0200 | [diff] [blame] | 61 | try { |
| 62 | return (Resource) q.getSingleResult(); |
| 63 | } |
| 64 | catch (NoResultException e) { |
| 65 | return null; |
| 66 | } |
| margaretha | 2c50c73 | 2018-10-17 18:48:52 +0200 | [diff] [blame] | 67 | } |
| 68 | |
| margaretha | d3a46ec | 2019-12-20 12:18:44 +0100 | [diff] [blame] | 69 | @Transactional |
| margaretha | 2c50c73 | 2018-10-17 18:48:52 +0200 | [diff] [blame] | 70 | public void createResource (String id, String germanTitle, |
| margaretha | 0c18622 | 2018-10-22 17:48:33 +0200 | [diff] [blame] | 71 | String englishTitle, String englishDescription, |
| 72 | Set<AnnotationLayer> layers) throws KustvaktException { |
| margaretha | 2c50c73 | 2018-10-17 18:48:52 +0200 | [diff] [blame] | 73 | ParameterChecker.checkStringValue(id, "id"); |
| 74 | ParameterChecker.checkStringValue(englishTitle, "en_title"); |
| 75 | ParameterChecker.checkStringValue(germanTitle, "de_title"); |
| 76 | |
| 77 | Resource r = new Resource(id, germanTitle, englishTitle, |
| 78 | englishDescription, layers); |
| 79 | entityManager.persist(r); |
| 80 | |
| 81 | } |
| margaretha | 38d530e | 2017-07-11 19:06:50 +0200 | [diff] [blame] | 82 | } |