Mercurial > lada > lada-server
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 } |