Mercurial > lada > lada-server
annotate src/main/java/de/intevation/lada/util/data/DefaultRepository.java @ 955:58fc5b5fad4b
The database might refuse to delete an object e.g. due to FK constraints.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Wed, 25 May 2016 16:51:55 +0200 |
parents | d74b5b1190ae |
children | 14876c62f692 |
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 * |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
47 * @return Response object containing the new object. |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
48 */ |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
49 @Override |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
50 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
|
51 try { |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
52 transaction.persistInDatabase(object, dataSource); |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
53 } |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
54 catch (EntityExistsException eee) { |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
55 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
|
56 ". Reason: " + eee.getClass().getName() + " - " + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
57 eee.getMessage()); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
58 return new Response(false, 601, object); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
59 } |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
60 catch (IllegalArgumentException iae) { |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
61 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
|
62 ". Reason: " + iae.getClass().getName() + " - " + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
63 iae.getMessage()); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
64 return new Response(false, 602, object); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
65 } |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
66 catch (TransactionRequiredException tre) { |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
67 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
|
68 ". Reason: " + tre.getClass().getName() + " - " + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
69 tre.getMessage()); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
70 return new Response(false, 603, object); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
71 } |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
72 catch (EJBTransactionRolledbackException ete) { |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
73 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
|
74 ". Reason: " + ete.getClass().getName() + " - " + |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
75 ete.getMessage()); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
76 return new Response(false, 604, object); |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
77 } |
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
78 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
|
79 return response; |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
80 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
81 |
451 | 82 /** |
83 * Update an existing object in the database. | |
84 * | |
85 * @param object The object. | |
86 * @param dataSource The datasource. | |
87 * | |
88 * @return Response object containing the upadted object. | |
89 */ | |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
90 @Override |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
91 public Response update(Object object, String dataSource) { |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
92 Response response = new Response(true, 200, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
93 try { |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
94 transaction.updateInDatabase(object, dataSource); |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
95 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
96 catch (EntityExistsException eee) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
97 return new Response(false, 601, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
98 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
99 catch (IllegalArgumentException iae) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
100 return new Response(false, 602, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
101 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
102 catch (TransactionRequiredException tre) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
103 return new Response(false, 603, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
104 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
105 catch (EJBTransactionRolledbackException ete) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
106 return new Response(false, 604, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
107 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
108 return response; |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
109 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
110 |
451 | 111 /** |
112 * Delete an object from the database. | |
113 * | |
114 * @param object The object. | |
115 * @param dataSource The datasource. | |
116 * | |
117 * @return Response object. | |
118 */ | |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
119 @Override |
450
808ea2091c1d
Updated repositoy structure and added probe services.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
438
diff
changeset
|
120 public Response delete(Object object, String dataSource) { |
700
d74b5b1190ae
fixed delete probe service.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
457
diff
changeset
|
121 Response response = new Response(true, 200, ""); |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
122 try { |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
123 transaction.removeFromDatabase(object, dataSource); |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
124 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
125 catch (IllegalArgumentException iae) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
126 return new Response(false, 602, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
127 } |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
128 catch (TransactionRequiredException tre) { |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
129 return new Response(false, 603, object); |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
130 } |
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
|
131 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
|
132 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
|
133 } |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
134 return response; |
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
135 } |
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
|
136 |
457
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
137 /** |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
138 * 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
|
139 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
140 * @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
|
141 * @param datasource The datasource. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
142 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
143 * @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
|
144 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
145 @Override |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
146 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
|
147 List<T> result = |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
148 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
|
149 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
|
150 } |
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 * 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
|
155 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
156 * @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
|
157 * @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
|
158 * @param start The start index. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
159 * @param datasource The datasource. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
160 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
161 * @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
|
162 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
163 @Override |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
164 public <T> Response filter( |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
165 CriteriaQuery<T> filter, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
166 int size, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
167 int start, |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
168 String dataSource |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
169 ) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
170 List<T> result = |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
171 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
|
172 if (size > 0 && start > -1) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
173 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
|
174 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
|
175 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
176 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
|
177 } |
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 * Get all objects. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
181 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
182 * @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
|
183 * @param dataSource The datasource. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
184 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
185 * @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
|
186 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
187 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
|
188 EntityManager manager = transaction.entityManager(dataSource); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
189 QueryBuilder<T> builder = |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
190 new QueryBuilder<T>(manager, clazz); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
191 List<T> result = |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
192 manager.createQuery(builder.getQuery()).getResultList(); |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
193 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
|
194 } |
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 * 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
|
198 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
199 * @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
|
200 * @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
|
201 * @param dataSource The datasource. |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
202 * |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
203 * @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
|
204 */ |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
205 @Override |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
206 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
|
207 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
|
208 if (item == null) { |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
209 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
|
210 } |
51784d74a85b
Refactored data access. CDI is much cleaner now.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
451
diff
changeset
|
211 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
|
212 } |
438
f0ad10e0e1b1
Moved Repositories, etc. into data package.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
213 } |