Mercurial > lada > lada-server
annotate src/main/java/de/intevation/lada/data/Repository.java @ 43:13178bbe77ff
New generic repository for data requests.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Fri, 24 May 2013 11:51:01 +0200 |
parents | |
children | 74a488e52dde |
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 |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
3 import java.util.List; |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
4 |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
5 import javax.enterprise.context.ApplicationScoped; |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
6 import javax.inject.Inject; |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
7 import javax.persistence.EntityManager; |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
8 import javax.persistence.criteria.CriteriaBuilder; |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
9 import javax.persistence.criteria.CriteriaQuery; |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
10 import javax.persistence.criteria.Root; |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
11 import javax.inject.Named; |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
12 |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
13 /** |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
14 * 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
|
15 * obejcts from the connected database. |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
16 * |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
17 * @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
|
18 */ |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
19 @Named |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
20 @ApplicationScoped |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
21 public class Repository |
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 /** |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
24 * The entitymanager managing the data. |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
25 */ |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
26 @Inject |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
27 private EntityManager em; |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
28 |
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 * 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
|
31 * |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
32 * @param clazz The class type. |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
33 * @return List of objects. |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
34 */ |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
35 public <T> List<T> findAll(Class<T> clazz) { |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
36 CriteriaBuilder builder = em.getCriteriaBuilder(); |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
37 CriteriaQuery<T> criteria = builder.createQuery(clazz); |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
38 Root<T> member = criteria.from(clazz); |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
39 criteria.select(member); |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
40 return em.createQuery(criteria).getResultList(); |
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 |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
43 /** |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
44 * Find a single object identified by its id. |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
45 * |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
46 * @param clazz The class type. |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
47 * @param id The object id. |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
48 * @return The requested object of type clazz |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
49 */ |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
50 public <T> T findById(Class<T> clazz, String id) { |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
51 return em.find(clazz, id); |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
52 } |
13178bbe77ff
New generic repository for data requests.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
53 } |