]> git.mxchange.org Git - jjobs-core.git/blob - src/org/mxchange/jjobs/model/user/skills/UserSkill.java
Continued:
[jjobs-core.git] / src / org / mxchange / jjobs / model / user / skills / UserSkill.java
1 /*
2  * Copyright (C) 2016 - 2022 Free Software Foundation
3  *
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.
8  *
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.
13  *
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/>.
16  */
17 package org.mxchange.jjobs.model.user.skills;
18
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.GeneratedValue;
27 import javax.persistence.GenerationType;
28 import javax.persistence.Id;
29 import javax.persistence.JoinColumn;
30 import javax.persistence.OneToOne;
31 import javax.persistence.Table;
32 import javax.persistence.Temporal;
33 import javax.persistence.TemporalType;
34 import org.mxchange.jcoreutils.comparable.ComparableUtils;
35 import org.mxchange.jcoreutils.number.SafeNumberUtils;
36 import org.mxchange.jjobs.model.skill.JobSkill;
37 import org.mxchange.jjobs.model.skill.Skillable;
38 import org.mxchange.jjobs.model.utils.SkillUtils;
39 import org.mxchange.jusercore.model.user.LoginUser;
40 import org.mxchange.jusercore.model.user.User;
41 import org.mxchange.jusercore.model.utils.UserUtils;
42
43 /**
44  * A POJO entity for user skills
45  *
46  * @author Roland Häder<roland@mxchange.org>
47  */
48 @Entity (name = "user_skills")
49 @Table (
50                 name = "user_skills"
51 )
52 @SuppressWarnings ("PersistenceUnitPresent")
53 public class UserSkill implements SkillableUser {
54
55         /**
56          * Serial number
57          */
58         private static final long serialVersionUID = 12_837_674_186_902L;
59
60         /**
61          * Link to skills entity
62          */
63         @JoinColumn (name = "user_skill_skill_id", referencedColumnName = "skill_id", nullable = false, updatable = false)
64         @OneToOne (cascade = CascadeType.REFRESH, optional = false, targetEntity = JobSkill.class)
65         private Skillable jobSkill;
66
67         /**
68          * Link to user entity
69          */
70         @JoinColumn (name = "user_skill_user_id", referencedColumnName = "user_id", nullable = false, updatable = false)
71         @OneToOne (cascade = CascadeType.REFRESH, optional = false, targetEntity = LoginUser.class)
72         private User skillUser;
73
74         /**
75          * When this entry has been created
76          */
77         @Basic (optional = false)
78         @Column (name = "user_skill_entry_created", nullable = false, updatable = false)
79         @Temporal (TemporalType.TIMESTAMP)
80         private Date userSkillEntryCreated;
81
82         /**
83          * When this entry has been updated
84          */
85         @Column (name = "user_skill_entry_updated", insertable = false)
86         @Temporal (TemporalType.TIMESTAMP)
87         private Date userSkillEntryUpdated;
88
89         /**
90          * Id number (primary key)
91          */
92         @Id
93         @GeneratedValue (strategy = GenerationType.IDENTITY)
94         @Column (name = "user_skill_id", nullable = false, updatable = false)
95         private Long userSkillId;
96
97         /**
98          * Default constructor, required for the EJB
99          */
100         public UserSkill () {
101                 // Empty by default
102         }
103
104         /**
105          * Constructor with all required entity properties
106          * <p>
107          * @param jobSkill  An instance of a Skillable class
108          * @param skillUser An instance of a User class
109          */
110         public UserSkill (final Skillable jobSkill, final User skillUser) {
111                 // Invoke default constructor
112                 this();
113
114                 // Validate parameter
115                 if (null == jobSkill) {
116                         // Throw NPE
117                         throw new NullPointerException("jobSkill is null"); //NOI18N
118                 } else if (jobSkill.getSkillId() == null) {
119                         // Throw it again
120                         throw new NullPointerException("jobSill.skillId is null"); //NOI18N
121                 } else if (jobSkill.getSkillId() < 1) {
122                         // Throw IAE
123                         throw new IllegalArgumentException(MessageFormat.format("jobSill.skillId={0} is invalid", jobSkill.getSkillId())); //NOI18N
124                 } else if (null == skillUser) {
125                         // Throw NPE
126                         throw new NullPointerException("skillUser is null"); //NOI18N
127                 } else if (skillUser.getUserId() == null) {
128                         // Throw it agin
129                         throw new NullPointerException("skillUser.userId is null"); //NOI18N
130                 } else if (skillUser.getUserId() < 1) {
131                         // Throw IAE
132                         throw new NullPointerException(MessageFormat.format("skillUser.userId={0} is invalid", skillUser.getUserId())); //NOI18N
133                 }
134
135                 // Set fields
136                 this.jobSkill = jobSkill;
137                 this.skillUser = skillUser;
138         }
139
140         @Override
141         public int compareTo (final SkillableUser user) {
142                 // Checkparameter and return 0 if equal
143                 if (null == user) {
144                         // Should not happen
145                         throw new NullPointerException("Parameter 'user' is null"); //NOI18N
146                 } else if (Objects.equals(this, user)) {
147                         // Same object
148                         return 0;
149                 }
150
151                 // Init comparitors
152                 final int comparitors[] = {
153                         // First compare user
154                         UserUtils.compare(this.getSkillUser(), user.getSkillUser()),
155                         // Next skill
156                         SkillUtils.compare(this.getJobSkill(), user.getJobSkill()),
157                         // Primary key
158                         SafeNumberUtils.compare(this.getUserSkillId(), user.getUserSkillId())
159                 };
160
161                 // Check all values
162                 final int comparison = ComparableUtils.checkAll(comparitors);
163
164                 // Return value
165                 return comparison;
166         }
167
168         @Override
169         public boolean equals (final Object object) {
170                 if (this == object) {
171                         return true;
172                 } else if (object == null) {
173                         return false;
174                 } else if (getClass() != object.getClass()) {
175                         return false;
176                 }
177
178                 final SkillableUser skillableUser = (SkillableUser) object;
179
180                 if (!Objects.equals(this.getJobSkill(), skillableUser.getJobSkill())) {
181                         return false;
182                 } else if (!Objects.equals(this.getSkillUser(), skillableUser.getSkillUser())) {
183                         return false;
184                 } else if (!Objects.equals(this.getUserSkillId(), skillableUser.getUserSkillId())) {
185                         return false;
186                 }
187
188                 return true;
189         }
190
191         @Override
192         public Skillable getJobSkill () {
193                 return this.jobSkill;
194         }
195
196         @Override
197         public void setJobSkill (final Skillable jobSkill) {
198                 this.jobSkill = jobSkill;
199         }
200
201         @Override
202         public User getSkillUser () {
203                 return this.skillUser;
204         }
205
206         @Override
207         public void setSkillUser (final User skillUser) {
208                 this.skillUser = skillUser;
209         }
210
211         @Override
212         @SuppressWarnings ("ReturnOfDateField")
213         public Date getUserSkillEntryCreated () {
214                 return this.userSkillEntryCreated;
215         }
216
217         @Override
218         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
219         public void setUserSkillEntryCreated (final Date userSkillEntryCreated) {
220                 this.userSkillEntryCreated = userSkillEntryCreated;
221         }
222
223         @Override
224         @SuppressWarnings ("ReturnOfDateField")
225         public Date getUserSkillEntryUpdated () {
226                 return this.userSkillEntryUpdated;
227         }
228
229         @Override
230         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
231         public void setUserSkillEntryUpdated (final Date userSkillEntryUpdated) {
232                 this.userSkillEntryUpdated = userSkillEntryUpdated;
233         }
234
235         @Override
236         public Long getUserSkillId () {
237                 return this.userSkillId;
238         }
239
240         @Override
241         public void setUserSkillId (final Long userSkillId) {
242                 this.userSkillId = userSkillId;
243         }
244
245         @Override
246         public int hashCode () {
247                 int hash = 7;
248
249                 hash = 17 * hash + Objects.hashCode(this.getJobSkill());
250                 hash = 17 * hash + Objects.hashCode(this.getSkillUser());
251                 hash = 17 * hash + Objects.hashCode(this.getUserSkillId());
252
253                 return hash;
254         }
255
256 }