Mercurial > lada > lada-server
annotate src/main/java/de/intevation/lada/util/data/DefaultRepository.java @ 1345:883ab3a6f525 tip
changed version to 2.7-SNAPSHOT after release2.6.2 for default branch
author | Marco Lechner, Bundesamt fuer Strahlenschutz, SW 2.1 <mlechner@bfs.de> |
---|---|
date | Fri, 07 Apr 2017 11:14:37 +0200 |
parents | 14876c62f692 |
children |
rev | line source |
---|---|
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
1 /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
2 * Software engineering by Intevation GmbH |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
3 * |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
4 * This file is Free Software under the GNU GPL (v>=3) |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
6 * the documentation coming with IMIS-Labordaten-Application for details. |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
7 */ |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
8 package de.intevation.lada.util.data; |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
9 |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
10 import java.util.List; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
11 |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
12 import javax.ejb.EJBTransactionRolledbackException; |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
13 import javax.enterprise.context.ApplicationScoped; |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
14 import javax.inject.Inject; |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
15 import javax.persistence.EntityExistsException; |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
16 import javax.persistence.EntityManager; |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
17 import javax.persistence.TransactionRequiredException; |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
18 import javax.persistence.criteria.CriteriaQuery; |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
19 |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
20 import org.apache.log4j.Logger; |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
21 |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
22 import de.intevation.lada.util.annotation.RepositoryConfig; |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
23 import de.intevation.lada.util.rest.Response; |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
24 |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
25 |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
26 /** |
451 | 27 * Repository providing read and write access. |
28 * | |
29 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a> | |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
30 */ |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
31 @RepositoryConfig(type=RepositoryType.RW) |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
32 @ApplicationScoped |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
33 public class DefaultRepository extends ReadOnlyRepository { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
34 |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
35 @Inject |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
36 private Logger logger; |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
37 |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
38 @Inject |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
39 private DataTransaction transaction; |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
40 |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
41 /** |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
42 * Create and persist a new object in the database. |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
43 * |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
44 * @param object The new object. |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
45 * @param dataSource The datasource. |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
46 * |
1290
14876c62f692
Push down refreshing of persisted objects deeper into the stack.
Tom Gottfried <tom@intevation.de>
parents:
955
diff
changeset
|
47 * @return Response object containing the new object, potentially |
14876c62f692
Push down refreshing of persisted objects deeper into the stack.
Tom Gottfried <tom@intevation.de>
parents:
955
diff
changeset
|
48 * modified by the database. |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
49 */ |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
50 @Override |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
51 public Response create(Object object, String dataSource) { |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
52 try { |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
53 transaction.persistInDatabase(object, dataSource); |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
54 } |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
55 catch (EntityExistsException eee) { |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
56 logger.error("Could not persist " + object.getClass().getName() + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
57 ". Reason: " + eee.getClass().getName() + " - " + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
58 eee.getMessage()); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
59 return new Response(false, 601, object); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
60 } |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
61 catch (IllegalArgumentException iae) { |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
62 logger.error("Could not persist " + object.getClass().getName() + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
63 ". Reason: " + iae.getClass().getName() + " - " + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
64 iae.getMessage()); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
65 return new Response(false, 602, object); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
66 } |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
67 catch (TransactionRequiredException tre) { |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
68 logger.error("Could not persist " + object.getClass().getName() + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
69 ". Reason: " + tre.getClass().getName() + " - " + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
70 tre.getMessage()); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
71 return new Response(false, 603, object); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
72 } |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
73 catch (EJBTransactionRolledbackException ete) { |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
74 logger.error("Could not persist " + object.getClass().getName() + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
75 ". Reason: " + ete.getClass().getName() + " - " + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
76 ete.getMessage()); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
77 return new Response(false, 604, object); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
78 } |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
79 Response response = new Response(true, 200, object); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
80 return response; |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
81 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
82 |
451 | 83 /** |
84 * Update an existing object in the database. | |
85 * | |
86 * @param object The object. | |
87 * @param dataSource The datasource. | |
88 * | |
89 * @return Response object containing the upadted object. | |
90 */ | |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
91 @Override |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
92 public Response update(Object object, String dataSource) { |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
93 Response response = new Response(true, 200, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
94 try { |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
95 transaction.updateInDatabase(object, dataSource); |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
96 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
97 catch (EntityExistsException eee) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
98 return new Response(false, 601, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
99 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
100 catch (IllegalArgumentException iae) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
101 return new Response(false, 602, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
102 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
103 catch (TransactionRequiredException tre) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
104 return new Response(false, 603, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
105 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
106 catch (EJBTransactionRolledbackException ete) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
107 return new Response(false, 604, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
108 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
109 return response; |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
110 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
111 |
451 | 112 /** |
113 * Delete an object from the database. | |
114 * | |
115 * @param object The object. | |
116 * @param dataSource The datasource. | |
117 * | |
118 * @return Response object. | |
119 */ | |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
120 @Override |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
121 public Response delete(Object object, String dataSource) { |
700
d74b5b1190ae
fixed delete probe service.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
457
diff
changeset
|
122 Response response = new Response(true, 200, ""); |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
123 try { |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
124 transaction.removeFromDatabase(object, dataSource); |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
125 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
126 catch (IllegalArgumentException iae) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
127 return new Response(false, 602, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
128 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
129 catch (TransactionRequiredException tre) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
130 return new Response(false, 603, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
131 } |
955
58fc5b5fad4b
The database might refuse to delete an object e.g. due to FK constraints.
Tom Gottfried <tom@intevation.de>
parents:
700
diff
changeset
|
132 catch (EJBTransactionRolledbackException ete) { |
58fc5b5fad4b
The database might refuse to delete an object e.g. due to FK constraints.
Tom Gottfried <tom@intevation.de>
parents:
700
diff
changeset
|
133 return new Response(false, 696, object); |
58fc5b5fad4b
The database might refuse to delete an object e.g. due to FK constraints.
Tom Gottfried <tom@intevation.de>
parents:
700
diff
changeset
|
134 } |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
135 return response; |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
136 } |
955
58fc5b5fad4b
The database might refuse to delete an object e.g. due to FK constraints.
Tom Gottfried <tom@intevation.de>
parents:
700
diff
changeset
|
137 |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
138 /** |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
139 * Get objects from database using the given filter. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
140 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
141 * @param filter Filter used to request objects. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
142 * @param datasource The datasource. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
143 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
144 * @return Response object containing the filtered list of objects. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
145 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
146 @Override |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
147 public <T> Response filter(CriteriaQuery<T> filter, String dataSource) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
148 List<T> result = |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
149 transaction.entityManager(dataSource).createQuery(filter).getResultList(); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
150 return new Response(true, 200, result); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
151 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
152 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
153 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
154 /** |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
155 * Get objects from database using the given filter. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
156 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
157 * @param filter Filter used to request objects. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
158 * @param size The maximum amount of objects. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
159 * @param start The start index. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
160 * @param datasource The datasource. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
161 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
162 * @return Response object containing the filtered list of objects. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
163 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
164 @Override |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
165 public <T> Response filter( |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
166 CriteriaQuery<T> filter, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
167 int size, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
168 int start, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
169 String dataSource |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
170 ) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
171 List<T> result = |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
172 transaction.entityManager(dataSource).createQuery(filter).getResultList(); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
173 if (size > 0 && start > -1) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
174 List<T> newList = result.subList(start, size + start); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
175 return new Response(true, 200, newList, result.size()); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
176 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
177 return new Response(true, 200, result); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
178 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
179 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
180 /** |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
181 * Get all objects. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
182 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
183 * @param clazz The type of the objects. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
184 * @param dataSource The datasource. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
185 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
186 * @return Response object containg all requested objects. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
187 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
188 public <T> Response getAll(Class<T> clazz, String dataSource) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
189 EntityManager manager = transaction.entityManager(dataSource); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
190 QueryBuilder<T> builder = |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
191 new QueryBuilder<T>(manager, clazz); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
192 List<T> result = |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
193 manager.createQuery(builder.getQuery()).getResultList(); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
194 return new Response(true, 200, result); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
195 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
196 |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
197 /** |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
198 * Get an object by its id. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
199 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
200 * @param clazz The type of the object. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
201 * @param id The id of the object. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
202 * @param dataSource The datasource. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
203 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
204 * @return Response object containg the requested object. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
205 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
206 @Override |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
207 public <T> Response getById(Class<T> clazz, Object id, String dataSource) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
208 T item = transaction.entityManager(dataSource).find(clazz, id); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
209 if (item == null) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
210 return new Response(false, 600, null); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
211 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
212 return new Response(true, 200, item); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
213 } |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
214 } |