1 package org.minetti.astrodevice.server.hibernate.dao;
2
3 import java.util.Iterator;
4 import java.util.List;
5 import javax.persistence.EntityManager;
6 import javax.persistence.Query;
7 import org.minetti.astrodevice.common.device.DeviceSignature;
8 import org.minetti.astrodevice.server.core.dao.DeviceSpecificationDao;
9 import org.minetti.astrodevice.server.core.object.DeviceSpecification;
10 import org.minetti.astrodevice.server.hibernate.object.DeviceSpecificationImpl;
11 import org.minetti.astrodevice.server.plugin.Plugin;
12
13
14
15
16
17 public final class DeviceSpecificationDaoImpl
18 implements DeviceSpecificationDao {
19
20
21
22
23 private final EntityManager entityManager;
24
25
26
27
28
29
30 protected DeviceSpecificationDaoImpl (final EntityManager entityManager) {
31 super();
32 this.entityManager = entityManager;
33 }
34
35
36
37
38
39 @SuppressWarnings("unchecked")
40 public List<DeviceSpecification> find () {
41 final Query query = this.entityManager.createNamedQuery("allDeviceSpecificationQuery");
42 return query.getResultList();
43 }
44
45
46
47
48
49
50
51 @SuppressWarnings("unchecked")
52 public List<DeviceSpecification> findSameProduct (final DeviceSignature productSignature) {
53 if (productSignature == null) {
54 throw new RuntimeException("productSignature is NULL");
55 }
56 Query query;
57 if (productSignature.getProductVersion() != null) {
58 query = this.entityManager.createNamedQuery("sameProductDeviceSpecificationQuery");
59 query.setParameter("productVersion", productSignature.getProductVersion());
60 }
61 else {
62 query = this.entityManager.createNamedQuery("sameProductDeviceSpecificationQueryWithNullVersion");
63 }
64 query.setParameter("bus", productSignature.getBus());
65 query.setParameter("productId", productSignature.getProductId());
66 query.setParameter("productDescription", productSignature.getProductDescription());
67 return query.getResultList();
68 }
69
70
71
72
73
74
75
76 @SuppressWarnings("unchecked")
77 public DeviceSpecification find (final DeviceSignature signature) {
78 if (signature == null) {
79 throw new RuntimeException("signature is NULL");
80 }
81 Query query;
82 if ((signature.getProductVersion() != null) && (signature.getSerialNumber() != null)) {
83 query = this.entityManager.createNamedQuery("signatureDeviceSpecificationQuery");
84 query.setParameter("productVersion", signature.getProductVersion());
85 query.setParameter("serialNumber", signature.getSerialNumber());
86 }
87 else if (signature.getProductVersion() != null) {
88 query = this.entityManager.createNamedQuery("signatureDeviceSpecificationQueryWithNullSerialNumber");
89 query.setParameter("productVersion", signature.getProductVersion());
90 }
91 else if (signature.getSerialNumber() != null) {
92 query = this.entityManager.createNamedQuery("signatureDeviceSpecificationQueryWithNullVersion");
93 query.setParameter("serialNumber", signature.getSerialNumber());
94 }
95 else {
96 query = this.entityManager.createNamedQuery("signatureDeviceSpecificationQueryWithNullVersionAndSerialNumber");
97 }
98 query.setParameter("bus", signature.getBus());
99 query.setParameter("productId", signature.getProductId());
100 query.setParameter("productDescription", signature.getProductDescription());
101 DeviceSpecification result = null;
102 final Iterator<DeviceSpecification> resultIterator = query.getResultList().iterator();
103 if (resultIterator.hasNext()) {
104 result = resultIterator.next();
105 }
106 return result;
107 }
108
109
110
111
112
113
114 public List<DeviceSpecification> findByPlugin (final Plugin plugin) {
115 if (plugin == null) {
116 throw new RuntimeException("plugin is NULL");
117 }
118 return findByPlugin(plugin.getClass().getName());
119 }
120
121
122
123
124
125
126 @SuppressWarnings("unchecked")
127 public List<DeviceSpecification> findByPlugin (final String pluginClassName) {
128 if (pluginClassName == null) {
129 throw new RuntimeException("pluginClassName is NULL");
130 }
131 final Query query = this.entityManager.createNamedQuery("pluginDeviceSpecificationQuery");
132 query.setParameter("pluginClassName", pluginClassName);
133 return query.getResultList();
134 }
135
136
137
138
139
140 public DeviceSpecification find (final long id) {
141 return this.entityManager.find(DeviceSpecificationImpl.class, new Long(id));
142 }
143
144
145
146
147
148
149
150 public DeviceSpecification persist (final DeviceSpecification deviceSpecification) {
151 final DeviceSpecification persistantDeviceSpecification = new DeviceSpecificationImpl(deviceSpecification);
152 this.entityManager.persist(persistantDeviceSpecification);
153 return persistantDeviceSpecification;
154 }
155
156
157
158
159
160
161
162 public void update (final DeviceSpecification deviceSpecification) {
163 this.entityManager.merge(deviceSpecification);
164 }
165
166
167
168
169
170
171
172 public void remove (final DeviceSpecification deviceSpecification) {
173 this.entityManager.remove(deviceSpecification);
174 }
175
176
177
178
179
180 @Override
181 public String toString () {
182 return "DeviceSpecificationDaoImpl";
183 }
184
185 }