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
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
27 * Repository providing read and write access.
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
28 *
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
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
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
82 /**
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
83 * Update an existing object in the database.
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
84 *
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
85 * @param object The object.
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
86 * @param dataSource The datasource.
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
87 *
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
88 * @return Response object containing the upadted object.
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
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
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
111 /**
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
112 * Delete an object from the database.
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
113 *
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
114 * @param object The object.
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
115 * @param dataSource The datasource.
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
116 *
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
117 * @return Response object.
89a5dbeb5bd6 Comments.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 450
diff changeset
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 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)