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