]> git.mxchange.org Git - jjobs-core.git/blob - src/org/mxchange/jjobs/model/skill/JobSkill.java
Please cherry-pick:
[jjobs-core.git] / src / org / mxchange / jjobs / model / skill / JobSkill.java
1 /*
2  * Copyright (C) 2016 - 2020 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.skill;
18
19 import org.mxchange.jjobs.model.skill.status.SkillStatus;
20 import java.util.Date;
21 import java.util.Objects;
22 import javax.persistence.Basic;
23 import javax.persistence.Column;
24 import javax.persistence.Entity;
25 import javax.persistence.EnumType;
26 import javax.persistence.Enumerated;
27 import javax.persistence.GeneratedValue;
28 import javax.persistence.GenerationType;
29 import javax.persistence.Id;
30 import javax.persistence.Table;
31 import javax.persistence.Temporal;
32 import javax.persistence.TemporalType;
33 import javax.persistence.Transient;
34
35 /**
36  * A POJO entity for skills
37  * <p>
38  * @author Roland Häder<roland@mxchange.org>
39  */
40 @Entity (name = "skills")
41 @Table (
42                 name = "skills"
43 )
44 @SuppressWarnings ("PersistenceUnitPresent")
45 public class JobSkill implements Skillable {
46
47         /**
48          * Serial number
49          */
50         @Transient
51         private static final long serialVersionUID = 185435718692L;
52
53         /**
54          * When this entry has been created
55          */
56         @Basic (optional = false)
57         @Column (name = "skill_created", nullable = false, updatable = false)
58         @Temporal (TemporalType.TIMESTAMP)
59         private Date skillCreated;
60
61         /**
62          * Id number (primary key)
63          */
64         @Id
65         @GeneratedValue (strategy = GenerationType.IDENTITY)
66         @Column (name = "skill_id", nullable = false, updatable = false)
67         private Long skillId;
68
69         /**
70          * When this entry has been last locked
71          */
72         @Column (name = "skill_last_locked", insertable = false)
73         @Temporal (TemporalType.TIMESTAMP)
74         private Date skillLastLocked;
75
76         /**
77          * Skill name
78          */
79         @Basic (optional = false)
80         @Column (name = "skill_name", nullable = false, unique = true)
81         private String skillName;
82
83         /**
84          * Skill status
85          */
86         @Basic (optional = false)
87         @Enumerated (EnumType.STRING)
88         @Column (name = "skill_status", nullable = false)
89         private SkillStatus skillStatus;
90
91         /**
92          * When this entry has been updated
93          */
94         @Column (name = "skill_updated", insertable = false)
95         @Temporal (TemporalType.TIMESTAMP)
96         private Date skillUpdated;
97
98         /**
99          * Default constructor, required for the JPA.
100          */
101         public JobSkill () {
102                 // Nothing to do here
103         }
104
105         /**
106          * Constructor with required fields
107          * <p>
108          * @param skillName Name of skill
109          * @param skillStatus Status
110          */
111         public JobSkill (final String skillName, final SkillStatus skillStatus) {
112                 // Call default constructor (always and regardless)
113                 this();
114
115                 // Validate parameter
116                 if (null == skillName) {
117                         // Throw NPE
118                         throw new NullPointerException("skillName is null"); //NOI18N
119                 } else if (skillName.isEmpty()) {
120                         // Throw IAE
121                         throw new IllegalArgumentException("skillName is empty"); //NOI18N
122                 } else if (null == skillStatus) {
123                         // Throw NPE
124                         throw new NullPointerException("skillStatus is null"); //NOI18N
125                 }
126
127                 // Set fields
128                 this.skillName = skillName;
129                 this.skillStatus = skillStatus;
130         }
131
132         @Override
133         public boolean equals (final Object object) {
134                 if (this == object) {
135                         return true;
136                 } else if (null == object) {
137                         return false;
138                 } else if (this.getClass() != object.getClass()) {
139                         return false;
140                 }
141
142                 final Skillable skill = (Skillable) object;
143
144                 if (!Objects.equals(this.getSkillStatus(), skill.getSkillStatus())) {
145                         return false;
146                 } else if (!Objects.equals(this.getSkillName(), skill.getSkillName())) {
147                         return false;
148                 } else if (!Objects.equals(this.getSkillId(), skill.getSkillId())) {
149                         return false;
150                 }
151
152                 return true;
153         }
154
155         @Override
156         @SuppressWarnings ("ReturnOfDateField")
157         public Date getSkillCreated () {
158                 return this.skillCreated;
159         }
160
161         @Override
162         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
163         public void setSkillCreated (final Date skillCreated) {
164                 this.skillCreated = skillCreated;
165         }
166
167         @Override
168         public Long getSkillId () {
169                 return this.skillId;
170         }
171
172         @Override
173         public void setSkillId (final Long skillId) {
174                 this.skillId = skillId;
175         }
176
177         @Override
178         @SuppressWarnings ("ReturnOfDateField")
179         public Date getSkillLastLocked () {
180                 return this.skillLastLocked;
181         }
182
183         @Override
184         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
185         public void setSkillLastLocked (final Date skillLastLocked) {
186                 this.skillLastLocked = skillLastLocked;
187         }
188
189         @Override
190         public String getSkillName () {
191                 return this.skillName;
192         }
193
194         @Override
195         public void setSkillName (final String skillName) {
196                 this.skillName = skillName;
197         }
198
199         @Override
200         public SkillStatus getSkillStatus () {
201                 return this.skillStatus;
202         }
203
204         @Override
205         public void setSkillStatus (final SkillStatus skillStatus) {
206                 this.skillStatus = skillStatus;
207         }
208
209         @Override
210         @SuppressWarnings ("ReturnOfDateField")
211         public Date getSkillUpdated () {
212                 return this.skillUpdated;
213         }
214
215         @Override
216         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
217         public void setSkillUpdated (final Date skillUpdated) {
218                 this.skillUpdated = skillUpdated;
219         }
220
221         @Override
222         public int hashCode () {
223                 int hash = 7;
224
225                 hash = 97 * hash + Objects.hashCode(this.getSkillId());
226                 hash = 97 * hash + Objects.hashCode(this.getSkillName());
227                 hash = 97 * hash + Objects.hashCode(this.getSkillStatus());
228
229                 return hash;
230         }
231
232 }