View Javadoc
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   * DAO for specifications on devices.
15   * @author Jean-Philippe MINETTI
16   */
17  public final class DeviceSpecificationDaoImpl
18  		implements DeviceSpecificationDao {
19  
20  	/**
21  	 * Entity manager.
22  	 */
23  	private final EntityManager entityManager;
24  
25  	/**
26  	 * Hidden constructor.
27  	 * @param entityManager Entity manager.
28  	 * @see DaoModuleImpl#newDeviceSpecificationDao(org.minetti.astrodevice.server.core.dao.DaoSession)
29  	 */
30  	protected DeviceSpecificationDaoImpl (final EntityManager entityManager) {
31  		super();
32  		this.entityManager = entityManager;
33  	}
34  
35  	/*
36  	 * (non-Javadoc)
37  	 * @see org.minetti.astrodevice.server.core.dao.DeviceSpecificationDao#find()
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  	 * (non-Javadoc)
47  	 * @see
48  	 * org.minetti.astrodevice.server.core.dao.DeviceSpecificationDao#findSameProduct(org.minetti
49  	 * .astrodevice.common.device.DeviceSignature)
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  	 * (non-Javadoc)
72  	 * @see
73  	 * org.minetti.astrodevice.server.core.dao.DeviceSpecificationDao#find(org.minetti.astrodevice
74  	 * .common.device.DeviceSignature)
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 	 * (non-Javadoc)
111 	 * @see org.minetti.astrodevice.server.core.dao.DeviceSpecificationDao#findByPlugin(org.minetti.
112 	 * astrodevice.server.plugin.Plugin)
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 	 * (non-Javadoc)
123 	 * @see
124 	 * org.minetti.astrodevice.server.core.dao.DeviceSpecificationDao#findByPlugin(java.lang.String)
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 	 * (non-Javadoc)
138 	 * @see org.minetti.astrodevice.server.core.dao.DeviceSpecificationDao#find(long)
139 	 */
140 	public DeviceSpecification find (final long id) {
141 		return this.entityManager.find(DeviceSpecificationImpl.class, new Long(id));
142 	}
143 
144 	/*
145 	 * (non-Javadoc)
146 	 * @see
147 	 * org.minetti.astrodevice.server.core.dao.DeviceSpecificationDao#persist(org.minetti.astrodevice
148 	 * .server.core.object.DeviceSpecification)
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 	 * (non-Javadoc)
158 	 * @see
159 	 * org.minetti.astrodevice.server.core.dao.DeviceSpecificationDao#update(org.minetti.astrodevice
160 	 * .server.core.object.DeviceSpecification)
161 	 */
162 	public void update (final DeviceSpecification deviceSpecification) {
163 		this.entityManager.merge(deviceSpecification);
164 	}
165 
166 	/*
167 	 * (non-Javadoc)
168 	 * @see
169 	 * org.minetti.astrodevice.server.core.dao.DeviceSpecificationDao#remove(org.minetti.astrodevice
170 	 * .server.core.object.DeviceSpecification)
171 	 */
172 	public void remove (final DeviceSpecification deviceSpecification) {
173 		this.entityManager.remove(deviceSpecification);
174 	}
175 
176 	/*
177 	 * (non-Javadoc)
178 	 * @see java.lang.Object#toString()
179 	 */
180 	@Override
181 	public String toString () {
182 		return "DeviceSpecificationDaoImpl";
183 	}
184 
185 }