2 * Copyright (C) 2016, 2017 Roland Häder
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package org.mxchange.jusercore.model.user.activity;
19 import java.text.MessageFormat;
20 import java.util.Date;
21 import java.util.Objects;
22 import javax.persistence.Basic;
23 import javax.persistence.CascadeType;
24 import javax.persistence.Column;
25 import javax.persistence.Entity;
26 import javax.persistence.EnumType;
27 import javax.persistence.Enumerated;
28 import javax.persistence.GeneratedValue;
29 import javax.persistence.GenerationType;
30 import javax.persistence.Id;
31 import javax.persistence.JoinColumn;
32 import javax.persistence.Lob;
33 import javax.persistence.NamedQueries;
34 import javax.persistence.NamedQuery;
35 import javax.persistence.OneToOne;
36 import javax.persistence.Table;
37 import javax.persistence.Temporal;
38 import javax.persistence.TemporalType;
39 import javax.persistence.Transient;
40 import org.mxchange.jcontacts.model.contact.title.PersonalTitle;
41 import org.mxchange.jusercore.model.user.LoginUser;
42 import org.mxchange.jusercore.model.user.User;
45 * A POJO for user activity log
47 * @author Roland Häder<roland@mxchange.org>
49 @Entity (name = "user_activity_log")
51 name = "user_activity_log"
55 @NamedQuery (name = "AllUserActivityLog", query = "SELECT a FROM user_activity_log AS a ORDER BY a.activityId DESC"),
56 @NamedQuery (name = "SearchAllUsersActivity", query = "SELECT a FROM user_activity_log AS a WHERE a.activityUser = :activityUser ORDER BY a.activityId DESC")
59 @SuppressWarnings ("PersistenceUnitPresent")
60 public class UserActivityLog implements LogableUserActivity {
66 private static final long serialVersionUID = 12_945_967_867_290_601L;
71 @Basic (optional = false)
72 @Column (name = "activity_contact_family_name", nullable = false, updatable = false)
73 private String activityContactFamilyName;
78 @Basic (optional = false)
79 @Column (name = "activity_contact_first_name", nullable = false, updatable = false)
80 private String activityContactFirstName;
83 * Personal title instance
85 @Basic (optional = false)
86 @Column (name = "activity_contact_gender", nullable = false, updatable = false)
87 @Enumerated (EnumType.STRING)
88 private PersonalTitle activityContactPersonalTitle;
94 @GeneratedValue (strategy = GenerationType.IDENTITY)
95 @Column (name = "activity_id", nullable = false, updatable = false)
96 private Long activityId;
101 @Column (name = "activity_message", updatable = false)
103 private String activityMessage;
108 @Column (name = "activity_principal_name", updatable = false)
109 private String activityPrincipalName;
114 @Basic (optional = false)
115 @Temporal (TemporalType.TIMESTAMP)
116 @Column (name = "activity_timestamp", nullable = false, updatable = false)
117 private Date activityTimestamp;
122 @Basic (optional = false)
123 @Column (name = "activity_type", nullable = false, updatable = false)
124 private String activityType;
129 @JoinColumn (name = "activity_user_id", referencedColumnName = "user_id")
130 @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.ALL)
131 private User activityUser;
136 @Basic (optional = false)
137 @Column (name = "activity_user_name", nullable = false, updatable = false)
138 private String activityUserName;
141 * Default constructor
143 public UserActivityLog () {
147 * Constructor with message, type and user
149 * @param activityMessage Message
150 * @param activityType Type
151 * @param activityUser User instance
152 * @param activityTimestamp imestamp
154 public UserActivityLog (final String activityMessage, final String activityType, final User activityUser, final Date activityTimestamp) {
155 // Call other constructor
156 this(activityType, activityUser, activityTimestamp);
158 // Is a message given?
159 if (null == activityMessage) {
161 throw new NullPointerException("activityMessage is null"); //NOI18N
162 } else if (activityMessage.isEmpty()) {
164 throw new IllegalArgumentException("activityMessage is empty"); //NOI18N
168 this.activityMessage = activityMessage;
172 * Constructor with type, user and timestamp
174 * @param activityType Type
175 * @param activityUser User instance
176 * @param activityTimestamp imestamp
178 public UserActivityLog (final String activityType, final User activityUser, final Date activityTimestamp) {
179 // Make sure all is set
180 if (null == activityType) {
182 throw new NullPointerException("activityType is null"); //NOI18N
183 } else if (activityType.isEmpty()) {
185 throw new IllegalArgumentException("activityType is empty"); //NOI18N
186 } else if (null == activityUser) {
188 throw new NullPointerException("activityUser is null"); //NOI18N
189 } else if (activityUser.getUserId() == null) {
191 throw new NullPointerException("activityUser.userId is null"); //NOI18N
192 } else if (activityUser.getUserId() < 1) {
194 throw new IllegalArgumentException(MessageFormat.format("activityUser.userId={0} is not valid", activityUser.getUserId())); //NOI18N
195 } else if (null == activityUser.getUserContact()) {
197 throw new NullPointerException("activityUser.userContact is null"); //NOI18N
198 } else if (null == activityUser.getUserContact().getContactId()) {
200 throw new NullPointerException("activityUser.userContact.contactId is null"); //NOI18N
201 } else if (activityUser.getUserContact().getContactId() < 1) {
203 throw new IllegalArgumentException(MessageFormat.format("activityUser.userContact.contactId={0} is not valid", activityUser.getUserContact().getContactId())); //NOI18N
204 } else if (null == activityTimestamp) {
206 throw new NullPointerException("activityTimestamp is null"); //NOI18N
210 this.activityType = activityType;
211 this.activityUser = activityUser;
212 this.activityTimestamp = activityTimestamp;
214 // Set all user/contact fields
215 this.activityUserName = activityUser.getUserName();
216 this.activityContactPersonalTitle = activityUser.getUserContact().getContactPersonalTitle();
217 this.activityContactFirstName = activityUser.getUserContact().getContactFirstName();
218 this.activityContactFamilyName = activityUser.getUserContact().getContactFamilyName();
222 * Constructor with message, type, user, timestamp and principal name
224 * @param activityMessage Message
225 * @param activityType Type
226 * @param activityUser User instance
227 * @param activityTimestamp imestamp
228 * @param principalName Principal name
230 public UserActivityLog (final String activityMessage, final String activityType, final User activityUser, final Date activityTimestamp, final String principalName) {
231 // Call other constructor
232 this(activityMessage, activityType, activityUser, activityTimestamp);
234 // Set principal name
235 this.activityPrincipalName = principalName;
239 * Consctructor with type, user, timestamp and principal name
241 * @param activityType Type
242 * @param activityUser User instance
243 * @param activityTimestamp imestamp
244 * @param principalName Principal name
246 public UserActivityLog (final String activityType, final User activityUser, final Date activityTimestamp, final String principalName) {
247 // Call other constructor
248 this(activityType, activityUser, activityTimestamp);
250 // Set principal name
251 this.activityPrincipalName = principalName;
255 public boolean equals (final Object object) {
256 if (this == object) {
258 } else if (null == object) {
260 } else if (this.getClass() != object.getClass()) {
264 final LogableUserActivity other = (LogableUserActivity) object;
266 if (!Objects.equals(this.getActivityMessage(), other.getActivityMessage())) {
268 } else if (!Objects.equals(this.getActivityPrincipalName(), other.getActivityPrincipalName())) {
270 } else if (!Objects.equals(this.getActivityType(), other.getActivityType())) {
272 } else if (!Objects.equals(this.getActivityId(), other.getActivityId())) {
274 } else if (!Objects.equals(this.getActivityTimestamp(), other.getActivityTimestamp())) {
276 } else if (!Objects.equals(this.getActivityUser(), other.getActivityUser())) {
284 public String getActivityContactFamilyName () {
285 return this.activityContactFamilyName;
289 public void setActivityContactFamilyName (final String activityContactFamilyName) {
290 this.activityContactFamilyName = activityContactFamilyName;
294 public String getActivityContactFirstName () {
295 return this.activityContactFirstName;
299 public void setActivityContactFirstName (final String activityContactFirstName) {
300 this.activityContactFirstName = activityContactFirstName;
304 public PersonalTitle getActivityContactPersonalTitle () {
305 return this.activityContactPersonalTitle;
309 public void setActivityContactPersonalTitle (final PersonalTitle activityContactPersonalTitle) {
310 this.activityContactPersonalTitle = activityContactPersonalTitle;
314 public Long getActivityId () {
315 return this.activityId;
319 public void setActivityId (final Long activityId) {
320 this.activityId = activityId;
324 public String getActivityMessage () {
325 return this.activityMessage;
329 public void setActivityMessage (final String activityMessage) {
330 this.activityMessage = activityMessage;
334 public String getActivityPrincipalName () {
335 return this.activityPrincipalName;
339 public void setActivityPrincipalName (final String activityPrincipalName) {
340 this.activityPrincipalName = activityPrincipalName;
344 @SuppressWarnings ("ReturnOfDateField")
345 public Date getActivityTimestamp () {
346 return this.activityTimestamp;
350 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
351 public void setActivityTimestamp (final Date activityTimestamp) {
352 this.activityTimestamp = activityTimestamp;
356 public String getActivityType () {
357 return this.activityType;
361 public void setActivityType (final String activityType) {
362 this.activityType = activityType;
366 public User getActivityUser () {
367 return this.activityUser;
371 public void setActivityUser (final User activityUser) {
372 this.activityUser = activityUser;
376 public String getActivityUserName () {
377 return this.activityUserName;
381 public void setActivityUserName (final String activityUserName) {
382 this.activityUserName = activityUserName;
386 public int hashCode () {
389 hash = 83 * hash + Objects.hashCode(this.getActivityId());
390 hash = 83 * hash + Objects.hashCode(this.getActivityMessage());
391 hash = 83 * hash + Objects.hashCode(this.getActivityPrincipalName());
392 hash = 83 * hash + Objects.hashCode(this.getActivityTimestamp());
393 hash = 83 * hash + Objects.hashCode(this.getActivityType());
394 hash = 83 * hash + Objects.hashCode(this.getActivityUser());