View Javadoc
1   // license-header java merge-point
2   //
3   // Attention: Generated code! Do not modify by hand!
4   // Generated by: SpringHibernateDaoImpl.vsl in andromda-spring-cartridge.
5   //
6   package fr.ifremer.quadrige2.core.dao.administration.user;
7   
8   /*-
9    * #%L
10   * Quadrige2 Core :: Quadrige2 Server Core
11   * $Id:$
12   * $HeadURL:$
13   * %%
14   * Copyright (C) 2017 Ifremer
15   * %%
16   * This program is free software: you can redistribute it and/or modify
17   * it under the terms of the GNU Affero General Public License as published by
18   * the Free Software Foundation, either version 3 of the License, or
19   * (at your option) any later version.
20   * 
21   * This program is distributed in the hope that it will be useful,
22   * but WITHOUT ANY WARRANTY; without even the implied warranty of
23   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24   * GNU General Public License for more details.
25   * 
26   * You should have received a copy of the GNU Affero General Public License
27   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
28   * #L%
29   */
30  
31  import com.google.common.base.Preconditions;
32  import com.google.common.collect.Lists;
33  import fr.ifremer.quadrige2.core.dao.referential.Privilege;
34  import fr.ifremer.quadrige2.core.dao.referential.PrivilegeImpl;
35  import fr.ifremer.quadrige2.core.dao.referential.StatusImpl;
36  import fr.ifremer.quadrige2.core.vo.administration.user.*;
37  import org.apache.commons.collections.CollectionUtils;
38  import org.apache.commons.lang3.ArrayUtils;
39  import org.hibernate.SessionFactory;
40  import org.hibernate.type.IntegerType;
41  import org.springframework.beans.factory.annotation.Autowired;
42  import org.springframework.context.annotation.Lazy;
43  import org.springframework.dao.DataRetrievalFailureException;
44  import org.springframework.stereotype.Repository;
45  
46  import java.util.Collection;
47  import java.util.HashSet;
48  import java.util.List;
49  import java.util.Objects;
50  
51  /**
52   * <p>
53   * QuserDaoImpl class.
54   * </p>
55   * 
56   * @see Quser
57   */
58  @Repository("quserDao")
59  @Lazy
60  public class QuserDaoImpl
61  		extends QuserDaoBase
62  		implements QuserExtendDao {
63  
64  	/**
65  	 * Constructor used by Spring
66  	 * 
67  	 * @param sessionFactory
68  	 *            a {@link org.hibernate.SessionFactory} object.
69  	 */
70  	@Autowired
71  	public QuserDaoImpl(SessionFactory sessionFactory) {
72  		super();
73  		setSessionFactory(sessionFactory);
74  	}
75  
76  	/** {@inheritDoc} */
77  	@Override
78  	public QuserVO save(QuserVO bean) {
79  		Preconditions.checkNotNull(bean);
80  
81  		Quser entity = null;
82  		if (bean.getQuserId() != null) {
83  			entity = load(bean.getQuserId());
84  		}
85  
86  		// not exists on DB: create it
87  		if (entity == null) {
88  			entity = Quser.Factory.newInstance();
89  
90  			// Convert to entity
91  			toEntity(bean, entity);
92  
93  			// Update
94  			entity = create(entity);
95  
96  			// Update the Id
97  			bean.setQuserId(entity.getQuserId());
98  		}
99  
100 		// exists on DB: update it
101 		else {
102 
103 			// Convert to entity
104 			toEntity(bean, entity);
105 
106 			// Update
107 			update(entity);
108 		}
109 
110 		return bean;
111 	}
112 
113 	/** {@inheritDoc} */
114 	@Override
115 	public Integer getDepartmentIdByUserId(int userId) {
116 		Integer recorderDepartmentId = queryUniqueTyped("departmentIdByQuserId",
117 				"quserId", IntegerType.INSTANCE, userId);
118 		if (recorderDepartmentId == null) {
119 			throw new DataRetrievalFailureException(String.format("Could not load departmentId from quser [quserId=%s]", userId));
120 		}
121 		return recorderDepartmentId;
122 	}
123 
124 	/** {@inheritDoc} */
125 	@Override
126 	public List<String> getPrivilegeCodesByUserId(int quserId) {
127 		return queryListTyped("privilegeCodesByQuserId", "quserId", IntegerType.INSTANCE, quserId);
128 	}
129 
130 	/** {@inheritDoc} */
131 	@Override
132 	public void remove(Collection<Quser> entities) {
133 		if (entities == null)
134 		{
135 			throw new IllegalArgumentException(
136 					"Quser.remove - 'entities' can not be null");
137 		}
138 		for (Quser entity : entities) {
139 			remove(entity);
140 		}
141 	}
142 
143 	/** {@inheritDoc} */
144 	@Override
145 	public void remove(Quser entity) {
146 		if (entity == null)
147 		{
148 			throw new IllegalArgumentException(
149 					"Quser.remove - 'entity' can not be null");
150 		}
151 
152 		// User privileges
153 		if (CollectionUtils.isNotEmpty(entity.getPrivileges())) {
154 			entity.getPrivileges().clear();
155 		}
156 
157 		getSession().delete(entity);
158 	}
159 
160 	/** {@inheritDoc} */
161 	@Override
162 	public Quser lightQuserVOToEntity(LightQuserVO source) {
163 		Quser target;
164 		if (source.getId() > 0) {
165 			target = load(source.getId());
166 		}
167 		else {
168 			target = Quser.Factory.newInstance();
169 		}
170 		toEntity(source, target);
171 
172 		return target;
173 	}
174 
175 	/** {@inheritDoc} */
176 	@Override
177 	public Quser quserVOToEntity(QuserVO source) {
178 		Quser target;
179 		if (source.getQuserId() != null) {
180 			target = load(source.getQuserId());
181 		}
182 		else {
183 			target = Quser.Factory.newInstance();
184 		}
185 
186 		toEntity(source, target);
187 
188 		return target;
189 	}
190 
191 	/* -- Internal methods -- */
192 
193 	/**
194 	 * <p>
195 	 * toEntity.
196 	 * </p>
197 	 * 
198 	 * @param source
199 	 *            a {@link fr.ifremer.quadrige2.core.vo.administration.user.QuserVO} object.
200 	 * @param target
201 	 *            a {@link fr.ifremer.quadrige2.core.dao.administration.user.Quser} object.
202 	 */
203 	protected void toEntity(QuserVO source, Quser target) {
204 
205 		target.setQuserId(source.getQuserId());
206 		target.setQuserLastNm(source.getQuserLastNm());
207 		target.setQuserFirstNm(source.getQuserFirstNm());
208 		target.setQuserIntranetLg(source.getQuserIntranetLg());
209 		target.setQuserExtranetLg(source.getQuserExtranetLg());
210 		target.setQuserCreationDt(source.getQuserCreationDt());
211 		target.setUpdateDt(source.getUpdateDt());
212 		target.setQuserEMail(source.getQuserEMail());
213 		target.setQuserAddress(source.getQuserAddress());
214 		target.setQuserPhone(source.getQuserPhone());
215 		target.setQuserOrgan(source.getQuserOrgan());
216 		target.setQuserAdminCenter(source.getQuserAdminCenter());
217 		target.setQuserSite(source.getQuserSite());
218 		target.setQuserLdapPresent(source.getQuserLdapPresent());
219 
220 		// Retrieve the source department id
221 		Integer sourceDepartmentId = source.getDepId();
222 		DepartmentVO sourceDepartment = source.getDepartment();
223 		if (sourceDepartmentId == null && sourceDepartment != null) {
224 			sourceDepartmentId = sourceDepartment.getDepId();
225 		}
226 
227 		// Set department
228 		if (sourceDepartmentId == null) {
229 			target.setDepartment(null);
230 		}
231 		else {
232 			target.setDepartment(load(DepartmentImpl.class, sourceDepartmentId));
233 		}
234 
235 		// Set status
236 		if (source.getStatusCd() == null) {
237 			target.setStatus(null);
238 		}
239 		else {
240 			target.setStatus(load(StatusImpl.class, source.getStatusCd()));
241 		}
242 
243 		// Set privileges
244 		PrivilegeVO[] sourcePrivileges = source.getPrivileges();
245 		if (ArrayUtils.isEmpty(sourcePrivileges)) {
246 			if (target.getPrivileges() != null) {
247 				target.getPrivileges().clear();
248 			}
249 		}
250 		else {
251 			// target had no privileges : add all as new privileges
252 			if (CollectionUtils.isEmpty(target.getPrivileges())) {
253 				if (target.getPrivileges() == null) {
254 					target.setPrivileges(new HashSet<Privilege>());
255 				}
256 				for (PrivilegeVO sourcePrivilege : sourcePrivileges) {
257 					Privilege privilege = load(PrivilegeImpl.class, sourcePrivilege.getPrivilegeCd());
258 					target.getPrivileges().add(privilege);
259 				}
260 			}
261 
262 			// target had some privileges : compare (add or remove)
263 			else {
264 				List<Privilege> privilegesToRemove = Lists.newArrayList(target.getPrivileges());
265 
266 				for (PrivilegeVO sourcePrivilege : sourcePrivileges) {
267 					boolean alreadyExist = false;
268 					for (Privilege existingPrivilege : target.getPrivileges()) {
269 
270 						// Privilege already affected to user
271 						if (Objects.equals(existingPrivilege.getPrivilegeCd(), sourcePrivilege.getPrivilegeCd())) {
272 							privilegesToRemove.remove(existingPrivilege);
273 							alreadyExist = true;
274 						}
275 					}
276 
277 					// Add new privilege
278 					if (!alreadyExist) {
279 						Privilege privilege = load(PrivilegeImpl.class, sourcePrivilege.getPrivilegeCd());
280 						target.getPrivileges().add(privilege);
281 					}
282 				}
283 
284 				// Remove privileges not found in source bean
285 				if (CollectionUtils.isNotEmpty(privilegesToRemove)) {
286 					target.getPrivileges().removeAll(privilegesToRemove);
287 				}
288 			}
289 		}
290 	}
291 
292 	/**
293 	 * <p>
294 	 * toEntity.
295 	 * </p>
296 	 * 
297 	 * @param source
298 	 *            a {@link fr.ifremer.quadrige2.core.vo.administration.user.LightQuserVO} object.
299 	 * @param target
300 	 *            a {@link fr.ifremer.quadrige2.core.dao.administration.user.Quser} object.
301 	 */
302 	protected void toEntity(LightQuserVO source, Quser target) {
303 
304 		target.setQuserId(source.getId());
305 		target.setQuserLastNm(source.getLastname());
306 		target.setQuserFirstNm(source.getFirstname());
307 
308 	}
309 }