]> git.mxchange.org Git - juser-core.git/blob - src/org/mxchange/jusercore/model/user/LoginUser.java
renamed named queries for better naming convention ...
[juser-core.git] / src / org / mxchange / jusercore / model / user / LoginUser.java
1 /*\r
2  * Copyright (C) 2016 Roland Haeder\r
3  *\r
4  * This program is free software: you can redistribute it and/or modify\r
5  * it under the terms of the GNU General Public License as published by\r
6  * the Free Software Foundation, either version 3 of the License, or\r
7  * (at your option) any later version.\r
8  *\r
9  * This program is distributed in the hope that it will be useful,\r
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12  * GNU General Public License for more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License\r
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
16  */\r
17 package org.mxchange.jusercore.model.user;\r
18 \r
19 import java.util.Calendar;\r
20 import java.util.Objects;\r
21 import javax.persistence.Basic;\r
22 import javax.persistence.CascadeType;\r
23 import javax.persistence.Column;\r
24 import javax.persistence.Entity;\r
25 import javax.persistence.EnumType;\r
26 import javax.persistence.Enumerated;\r
27 import javax.persistence.GeneratedValue;\r
28 import javax.persistence.GenerationType;\r
29 import javax.persistence.Id;\r
30 import javax.persistence.Index;\r
31 import javax.persistence.JoinColumn;\r
32 import javax.persistence.Lob;\r
33 import javax.persistence.NamedQueries;\r
34 import javax.persistence.NamedQuery;\r
35 import javax.persistence.OneToOne;\r
36 import javax.persistence.Table;\r
37 import javax.persistence.Temporal;\r
38 import javax.persistence.TemporalType;\r
39 import org.mxchange.jcontacts.contact.Contact;\r
40 import org.mxchange.jcontacts.contact.UserContact;\r
41 import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;\r
42 import org.mxchange.jusercore.model.user.status.UserAccountStatus;\r
43 \r
44 /**\r
45  * A generic user entity class\r
46  * <p>\r
47  * @author Roland Haeder<roland@mxchange.org>\r
48  */\r
49 @Entity (name = "users")\r
50 @Table (\r
51                 name = "users",\r
52                 indexes = {\r
53                         @Index (\r
54                                         name = "confirmation_key",\r
55                                         unique = true,\r
56                                         columnList = "user_confirm_key"\r
57                         ),\r
58                         @Index (\r
59                                         name = "user_name",\r
60                                         unique = true,\r
61                                         columnList = "user_name"\r
62                         )\r
63                 }\r
64 )\r
65 @NamedQueries (\r
66                 {\r
67                         @NamedQuery (name = "AllUserNames", query = "SELECT DISTINCT u.userName FROM users AS u ORDER BY u.userId ASC"),\r
68                         @NamedQuery (name = "AllEmailAddresses", query = "SELECT DISTINCT c.contactEmailAddress FROM contacts AS c INNER JOIN users AS u ON u.userContact = c ORDER BY c.contactId ASC"),\r
69                         @NamedQuery (name = "SearchUserByName", query = "SELECT u FROM users AS u WHERE LOWER(u.userName) LIKE LOWER(:param)"),\r
70                         @NamedQuery (name = "SearchUserById", query = "SELECT u FROM users AS u WHERE u.userId = :id"),\r
71                         @NamedQuery (name = "SearchUserByEmailAddress", query = "SELECT u FROM users AS u INNER JOIN contacts AS c ON u.userContact = c WHERE LOWER(c.contactEmailAddress) LIKE LOWER(:param)"),\r
72                         @NamedQuery (name = "SearchAllUsersExcept", query = "SELECT u FROM users AS u WHERE u != :user ORDER BY u.userId ASC"),\r
73                         @NamedQuery (name = "AllUsers", query = "SELECT u FROM users AS u ORDER BY u.userId ASC"),\r
74                         @NamedQuery (name = "AllPublicUsers", query = "SELECT u FROM users AS u WHERE u.userAccountStatus = :status AND u.userProfileMode = :mode ORDER BY u.userId ASC"),\r
75                         @NamedQuery (name = "AllMemberPublicUsers", query = "SELECT u FROM users AS u WHERE u.userAccountStatus = :status AND u.userProfileMode IN (:public, :members) ORDER BY u.userId ASC")\r
76                 }\r
77 )\r
78 @SuppressWarnings ("PersistenceUnitPresent")\r
79 public class LoginUser implements User {\r
80 \r
81         /**\r
82          * Serial number\r
83          */\r
84         private static final long serialVersionUID = 4_328_454_581_751L;\r
85 \r
86         /**\r
87          * Account status\r
88          */\r
89         @Basic (optional = false)\r
90         @Column (name = "user_account_status", nullable = false)\r
91         @Enumerated (value = EnumType.STRING)\r
92         private UserAccountStatus userAccountStatus;\r
93 \r
94         /**\r
95          * Confirmation key\r
96          */\r
97         @Column (name = "user_confirm_key", length = 50)\r
98         private String userConfirmKey;\r
99 \r
100         /**\r
101          * Id number from "contacts" table\r
102          */\r
103         @JoinColumn (name = "user_contact_id", referencedColumnName = "contact_id", nullable = false, updatable = false, unique = true)\r
104         @OneToOne (targetEntity = UserContact.class, cascade = CascadeType.ALL, optional = false)\r
105         private Contact userContact;\r
106 \r
107         /**\r
108          * "created" timestamp\r
109          */\r
110         @Basic (optional = false)\r
111         @Temporal (TemporalType.TIMESTAMP)\r
112         @Column (name = "user_created", nullable = false)\r
113         private Calendar userCreated;\r
114 \r
115         /**\r
116          * Encrypted password\r
117          */\r
118         @Basic (optional = false)\r
119         @Column (name = "user_encrypted_password", nullable = false)\r
120         private String userEncryptedPassword;\r
121 \r
122         /**\r
123          * User id\r
124          */\r
125         @Id\r
126         @Column (name = "user_id", nullable = false, length = 20, updatable = false)\r
127         @GeneratedValue (strategy = GenerationType.IDENTITY)\r
128         private Long userId;\r
129 \r
130         /**\r
131          * Last "locked" timestamp\r
132          */\r
133         @Temporal (TemporalType.TIMESTAMP)\r
134         @Column (name = "user_last_locked_timestamp")\r
135         private Calendar userLastLocked;\r
136 \r
137         /**\r
138          * Last locked reason\r
139          */\r
140         @Lob\r
141         @Column (name = "user_last_locked_reason")\r
142         private String userLastLockedReason;\r
143 \r
144         /**\r
145          * User name\r
146          */\r
147         @Basic (optional = false)\r
148         @Column (name = "user_name", nullable = false, length = 20)\r
149         private String userName;\r
150 \r
151         /**\r
152          * Profile mode of this user\r
153          */\r
154         @Basic (optional = false)\r
155         @Enumerated (EnumType.STRING)\r
156         @Column (name = "user_profile_mode", nullable = false)\r
157         private ProfileMode userProfileMode;\r
158 \r
159         /**\r
160          * When this user has been updated\r
161          */\r
162         @Temporal (TemporalType.TIMESTAMP)\r
163         @Column (name = "user_updated")\r
164         private Calendar userUpdated;\r
165 \r
166         /**\r
167          * Default constructor\r
168          */\r
169         public LoginUser () {\r
170                 // Default is invisible\r
171                 this.userProfileMode = ProfileMode.INVISIBLE;\r
172         }\r
173 \r
174         @Override\r
175         public void copyAll (final User user) {\r
176                 // Is contact set?\r
177                 if (user.getUserContact() instanceof Contact) {\r
178                         // Copy also contact data\r
179                         this.getUserContact().copyAll(user.getUserContact());\r
180                 }\r
181 \r
182                 // Copy other data\r
183                 this.setUserConfirmKey(user.getUserConfirmKey());\r
184                 this.setUserName(user.getUserName());\r
185                 this.setUserEncryptedPassword(user.getUserEncryptedPassword());\r
186                 this.setUserAccountStatus(user.getUserAccountStatus());\r
187                 this.setUserCreated(user.getUserCreated());\r
188                 this.setUserLastLocked(user.getUserLastLocked());\r
189                 this.setUserUpdated(user.getUserUpdated());\r
190                 this.setUserProfileMode(user.getUserProfileMode());\r
191         }\r
192 \r
193         @Override\r
194         public boolean equals (final Object object) {\r
195                 if (null == object) {\r
196                         return false;\r
197                 } else if (this.getClass() != object.getClass()) {\r
198                         return false;\r
199                 }\r
200 \r
201                 final User other = (User) object;\r
202 \r
203                 return ((Objects.equals(this.getUserName(), other.getUserName())) &&\r
204                                 (Objects.equals(this.getUserId(), other.getUserId())));\r
205         }\r
206 \r
207         @Override\r
208         public UserAccountStatus getUserAccountStatus () {\r
209                 return this.userAccountStatus;\r
210         }\r
211 \r
212         @Override\r
213         public void setUserAccountStatus (final UserAccountStatus userAccountStatus) {\r
214                 this.userAccountStatus = userAccountStatus;\r
215         }\r
216 \r
217         @Override\r
218         public String getUserConfirmKey () {\r
219                 return this.userConfirmKey;\r
220         }\r
221 \r
222         @Override\r
223         public void setUserConfirmKey (final String userConfirmKey) {\r
224                 this.userConfirmKey = userConfirmKey;\r
225         }\r
226 \r
227         @Override\r
228         public Contact getUserContact () {\r
229                 return this.userContact;\r
230         }\r
231 \r
232         @Override\r
233         public void setUserContact (final Contact userContact) {\r
234                 this.userContact = userContact;\r
235         }\r
236 \r
237         @Override\r
238         @SuppressWarnings ("ReturnOfDateField")\r
239         public Calendar getUserCreated () {\r
240                 return this.userCreated;\r
241         }\r
242 \r
243         @Override\r
244         @SuppressWarnings ("AssignmentToDateFieldFromParameter")\r
245         public void setUserCreated (final Calendar userCreated) {\r
246                 this.userCreated = userCreated;\r
247         }\r
248 \r
249         @Override\r
250         public String getUserEncryptedPassword () {\r
251                 return this.userEncryptedPassword;\r
252         }\r
253 \r
254         @Override\r
255         public void setUserEncryptedPassword (final String userEncryptedPassword) {\r
256                 this.userEncryptedPassword = userEncryptedPassword;\r
257         }\r
258 \r
259         @Override\r
260         public Long getUserId () {\r
261                 return this.userId;\r
262         }\r
263 \r
264         @Override\r
265         public void setUserId (final Long userId) {\r
266                 this.userId = userId;\r
267         }\r
268 \r
269         @Override\r
270         @SuppressWarnings ("ReturnOfDateField")\r
271         public Calendar getUserLastLocked () {\r
272                 return this.userLastLocked;\r
273         }\r
274 \r
275         @Override\r
276         @SuppressWarnings ("AssignmentToDateFieldFromParameter")\r
277         public void setUserLastLocked (final Calendar userLastLocked) {\r
278                 this.userLastLocked = userLastLocked;\r
279         }\r
280 \r
281         @Override\r
282         public String getUserLastLockedReason () {\r
283                 return this.userLastLockedReason;\r
284         }\r
285 \r
286         @Override\r
287         public void setUserLastLockedReason (final String userLastLockedReason) {\r
288                 this.userLastLockedReason = userLastLockedReason;\r
289         }\r
290 \r
291         @Override\r
292         public String getUserName () {\r
293                 return this.userName;\r
294         }\r
295 \r
296         @Override\r
297         public void setUserName (final String userName) {\r
298                 this.userName = userName;\r
299         }\r
300 \r
301         @Override\r
302         public ProfileMode getUserProfileMode () {\r
303                 return this.userProfileMode;\r
304         }\r
305 \r
306         @Override\r
307         public void setUserProfileMode (final ProfileMode userProfileMode) {\r
308                 this.userProfileMode = userProfileMode;\r
309         }\r
310 \r
311         @Override\r
312         @SuppressWarnings ("ReturnOfDateField")\r
313         public Calendar getUserUpdated () {\r
314                 return this.userUpdated;\r
315         }\r
316 \r
317         @Override\r
318         @SuppressWarnings ("AssignmentToDateFieldFromParameter")\r
319         public void setUserUpdated (final Calendar userUpdated) {\r
320                 this.userUpdated = userUpdated;\r
321         }\r
322 \r
323         @Override\r
324         public int hashCode () {\r
325                 int hash = 5;\r
326                 hash = 83 * hash + Objects.hashCode(this.getUserName());\r
327                 hash = 83 * hash + Objects.hashCode(this.getUserId());\r
328                 return hash;\r
329         }\r
330 \r
331 }\r