1 package net.sumaris.core.dao.administration.user;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import com.google.common.base.Preconditions;
26 import net.sumaris.core.util.Beans;
27 import net.sumaris.core.util.Dates;
28 import net.sumaris.core.dao.technical.hibernate.HibernateDaoSupport;
29 import net.sumaris.core.exception.BadUpdateDateException;
30 import net.sumaris.core.model.administration.user.UserSettings;
31 import net.sumaris.core.vo.administration.user.UserSettingsVO;
32 import org.nuiton.i18n.I18n;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35 import org.springframework.dao.EmptyResultDataAccessException;
36 import org.springframework.stereotype.Repository;
37
38 import javax.persistence.EntityManager;
39 import javax.persistence.NoResultException;
40 import javax.persistence.criteria.CriteriaBuilder;
41 import javax.persistence.criteria.CriteriaQuery;
42 import javax.persistence.criteria.ParameterExpression;
43 import javax.persistence.criteria.Root;
44 import java.sql.Timestamp;
45 import java.util.List;
46 import java.util.Objects;
47 import java.util.stream.Collectors;
48
49 @Repository("userSettingsDao")
50 public class UserSettingsDaoImpl extends HibernateDaoSupport implements UserSettingsDao {
51
52
53 private static final Logger log =
54 LoggerFactory.getLogger(UserSettingsDaoImpl.class);
55
56 @Override
57 public UserSettingsVO getByIssuer(String issuer) {
58
59 EntityManager session = getEntityManager();
60 CriteriaBuilder builder = session.getCriteriaBuilder();
61 CriteriaQuery<UserSettings> query = builder.createQuery(UserSettings.class);
62 Root<UserSettings> root = query.from(UserSettings.class);
63
64 ParameterExpression<String> issuerParam = builder.parameter(String.class);
65
66 query.select(root)
67 .where(builder.equal(root.get(UserSettingsVO.Fields.ISSUER), issuerParam));
68
69 try {
70 return toUserSettingsVO(session.createQuery(query)
71 .setParameter(issuerParam, issuer)
72 .getSingleResult());
73 } catch (EmptyResultDataAccessException | NoResultException e) {
74 return null;
75 }
76 }
77
78 @Override
79 public UserSettingsVO get(int id) {
80 return toUserSettingsVO(get(UserSettings.class, id));
81 }
82
83 @Override
84 public UserSettingsVO../../../../../net/sumaris/core/vo/administration/user/UserSettingsVO.html#UserSettingsVO">UserSettingsVO save(UserSettingsVO source) {
85 Preconditions.checkNotNull(source);
86 Preconditions.checkNotNull(source.getLocale(), "Missing 'settings.locale'");
87 Preconditions.checkNotNull(source.getLatLongFormat(), "Missing 'settings.latLongformat'");
88
89 EntityManager entityManager = getEntityManager();
90 UserSettings entity = null;
91 if (source.getId() != null) {
92 entity = get(UserSettings.class, source.getId());
93 }
94 boolean isNew = (entity == null);
95 if (isNew) {
96 entity = new UserSettings();
97 }
98
99 if (!isNew) {
100
101 if (entity.getUpdateDate() != null) {
102 Timestamp serverUpdateDtNoMillisecond = Dates.resetMillisecond(entity.getUpdateDate());
103 Timestamp sourceUpdateDtNoMillisecond = Dates.resetMillisecond(source.getUpdateDate());
104 if (!Objects.equals(sourceUpdateDtNoMillisecond, serverUpdateDtNoMillisecond)) {
105 throw new BadUpdateDateException(I18n.t("sumaris.persistence.error.badUpdateDate",
106 I18n.t("sumaris.persistence.table.userSettings"), source.getId(), serverUpdateDtNoMillisecond,
107 sourceUpdateDtNoMillisecond));
108 }
109 }
110
111
112
113
114
115
116
117
118
119
120
121 }
122
123 userSettingsVOToEntity(source, entity, true);
124
125
126 Timestamp newUpdateDate = getDatabaseCurrentTimestamp();
127 entity.setUpdateDate(newUpdateDate);
128
129
130 if (isNew) {
131 entityManager.persist(entity);
132 source.setId(entity.getId());
133 } else {
134 entityManager.merge(entity);
135 }
136
137 source.setUpdateDate(newUpdateDate);
138
139 getEntityManager().flush();
140 getEntityManager().clear();
141
142 return source;
143 }
144
145 @Override
146 public void delete(int id) {
147
148 log.debug(String.format("Deleting user settings {id=%s}...", id));
149 delete(UserSettings.class, id);
150 }
151
152 @Override
153 public UserSettingsVO toUserSettingsVO(UserSettings source) {
154 if (source == null) return null;
155 UserSettingsVOtion/user/UserSettingsVO.html#UserSettingsVO">UserSettingsVO target = new UserSettingsVO();
156
157 Beans.copyProperties(source, target);
158
159
160
161
162 return target;
163 }
164
165
166
167 protected List<UserSettingsVO> toUserSettingsVOs(List<UserSettings> source) {
168 return source.stream()
169 .map(this::toUserSettingsVO)
170 .filter(Objects::nonNull)
171 .collect(Collectors.toList());
172 }
173
174 protected void userSettingsVOToEntity(UserSettingsVO source, UserSettings target, boolean copyIfNull) {
175
176 Beans.copyProperties(source, target);
177
178
179
180
181
182
183
184
185
186
187
188 }
189 }