annotate src/main/java/de/intevation/lada/data/Repository.java @ 131:4e181a4aaab0

Refactored the entity repositories. * Generic repository is now abstract. * Concrete repositories implement all abstract methods. * Services are using the generic repository.
author Raimund Renkert <rrenkert@intevation.de>
date Thu, 13 Jun 2013 16:17:11 +0200
parents 02a4eddc7760
children 8250e5bb7c84
rev   line source
43
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 package de.intevation.lada.data;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2
87
36b2191c3fcb Added reset function to reinit the success boolean as same as errors and
Torsten Irländer <torsten.irlaender@intevation.de>
parents: 86
diff changeset
3 import java.util.HashMap;
43
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4 import java.util.List;
84
74a488e52dde Moved errors and warnings from LProbeRepository to Repository as they are
Torsten Irländer <torsten.irlaender@intevation.de>
parents: 43
diff changeset
5 import java.util.Map;
43
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 import javax.enterprise.context.ApplicationScoped;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8 import javax.inject.Inject;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9 import javax.persistence.EntityManager;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10 import javax.persistence.criteria.CriteriaBuilder;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import javax.persistence.criteria.CriteriaQuery;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12 import javax.persistence.criteria.Root;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13 import javax.inject.Named;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14
107
5abec5413d65 Let all services and repositories return a response object that contains errors and warnings.
Raimund Renkert <rrenkert@intevation.de>
parents: 88
diff changeset
15 import de.intevation.lada.rest.Response;
5abec5413d65 Let all services and repositories return a response object that contains errors and warnings.
Raimund Renkert <rrenkert@intevation.de>
parents: 88
diff changeset
16
43
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
17 /**
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18 * This generic Container is an interface to request and select Data
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 * obejcts from the connected database.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20 *
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a>
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 */
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23 @Named
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 @ApplicationScoped
131
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
25 public abstract class Repository
43
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 {
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 /**
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 * The entitymanager managing the data.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29 */
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 @Inject
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31 private EntityManager em;
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32
131
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
33 public abstract Response create(Object object);
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
34
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
35 public abstract Response update(Object object);
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
36
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
37 public abstract Response filter(Map<String, String> keys);
84
74a488e52dde Moved errors and warnings from LProbeRepository to Repository as they are
Torsten Irländer <torsten.irlaender@intevation.de>
parents: 43
diff changeset
38
74a488e52dde Moved errors and warnings from LProbeRepository to Repository as they are
Torsten Irländer <torsten.irlaender@intevation.de>
parents: 43
diff changeset
39 /**
43
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 * Get all objects of type <link>clazz</link>from database.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 *
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42 * @param clazz The class type.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 * @return List of objects.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 */
107
5abec5413d65 Let all services and repositories return a response object that contains errors and warnings.
Raimund Renkert <rrenkert@intevation.de>
parents: 88
diff changeset
45 public <T> Response findAll(Class<T> clazz) {
43
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 CriteriaBuilder builder = em.getCriteriaBuilder();
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 CriteriaQuery<T> criteria = builder.createQuery(clazz);
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 Root<T> member = criteria.from(clazz);
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 criteria.select(member);
107
5abec5413d65 Let all services and repositories return a response object that contains errors and warnings.
Raimund Renkert <rrenkert@intevation.de>
parents: 88
diff changeset
50 List<T> result = em.createQuery(criteria).getResultList();
5abec5413d65 Let all services and repositories return a response object that contains errors and warnings.
Raimund Renkert <rrenkert@intevation.de>
parents: 88
diff changeset
51 return new Response(true, 200, result);
87
36b2191c3fcb Added reset function to reinit the success boolean as same as errors and
Torsten Irländer <torsten.irlaender@intevation.de>
parents: 86
diff changeset
52 }
36b2191c3fcb Added reset function to reinit the success boolean as same as errors and
Torsten Irländer <torsten.irlaender@intevation.de>
parents: 86
diff changeset
53
43
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 /**
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 * Find a single object identified by its id.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 *
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 * @param clazz The class type.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 * @param id The object id.
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 * @return The requested object of type clazz
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 */
107
5abec5413d65 Let all services and repositories return a response object that contains errors and warnings.
Raimund Renkert <rrenkert@intevation.de>
parents: 88
diff changeset
61 public <T> Response findById(Class<T> clazz, String id) {
85
7b932d54719c Set general error on loading items.
Torsten Irländer <torsten.irlaender@intevation.de>
parents: 84
diff changeset
62 T item = em.find(clazz, id);
7b932d54719c Set general error on loading items.
Torsten Irländer <torsten.irlaender@intevation.de>
parents: 84
diff changeset
63 if (item == null) {
107
5abec5413d65 Let all services and repositories return a response object that contains errors and warnings.
Raimund Renkert <rrenkert@intevation.de>
parents: 88
diff changeset
64 return new Response(false, 600, null);
85
7b932d54719c Set general error on loading items.
Torsten Irländer <torsten.irlaender@intevation.de>
parents: 84
diff changeset
65 }
107
5abec5413d65 Let all services and repositories return a response object that contains errors and warnings.
Raimund Renkert <rrenkert@intevation.de>
parents: 88
diff changeset
66 return new Response(true, 200, item);
84
74a488e52dde Moved errors and warnings from LProbeRepository to Repository as they are
Torsten Irländer <torsten.irlaender@intevation.de>
parents: 43
diff changeset
67 }
115
02a4eddc7760 Make a criteria builder available in repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 107
diff changeset
68
131
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
69 /**
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
70 * Filter object list by the given criteria.
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
71 *
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
72 * @param criteria
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
73 * @return List of LProbe objects.
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
74 */
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
75 public <T> List<T> filter(CriteriaQuery<T> criteria) {
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
76 return em.createQuery(criteria).getResultList();
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
77 }
4e181a4aaab0 Refactored the entity repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 115
diff changeset
78
115
02a4eddc7760 Make a criteria builder available in repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 107
diff changeset
79 public CriteriaBuilder getCriteriaBuilder() {
02a4eddc7760 Make a criteria builder available in repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 107
diff changeset
80 return em.getCriteriaBuilder();
02a4eddc7760 Make a criteria builder available in repositories.
Raimund Renkert <rrenkert@intevation.de>
parents: 107
diff changeset
81 }
43
13178bbe77ff New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
82 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)