]> git.mxchange.org Git - jjobs-core.git/blobdiff - src/org/mxchange/jjobs/model/user/skills/UserSkill.java
Updated copyright year
[jjobs-core.git] / src / org / mxchange / jjobs / model / user / skills / UserSkill.java
index ebe1135e1d5777f5746031ed02df291be02f2bd1..768dfe60418c655ff872037abbc925dcf2a00af6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 - 2019 Free Software Foundation
+ * Copyright (C) 2016 - 2024 Free Software Foundation
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -16,9 +16,9 @@
  */
 package org.mxchange.jjobs.model.user.skills;
 
-import org.mxchange.jjobs.model.skill.JobSkill;
-import org.mxchange.jjobs.model.skill.Skillable;
+import java.text.MessageFormat;
 import java.util.Date;
+import java.util.Objects;
 import javax.persistence.Basic;
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
@@ -31,8 +31,14 @@ import javax.persistence.OneToOne;
 import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
+import org.mxchange.jcoreutils.comparable.ComparableUtils;
+import org.mxchange.jcoreutils.number.SafeNumberUtils;
+import org.mxchange.jjobs.model.skill.JobSkill;
+import org.mxchange.jjobs.model.skill.Skillable;
+import org.mxchange.jjobs.model.utils.SkillUtils;
 import org.mxchange.jusercore.model.user.LoginUser;
 import org.mxchange.jusercore.model.user.User;
+import org.mxchange.jusercore.model.utils.UserUtils;
 
 /**
  * A POJO entity for user skills
@@ -54,7 +60,7 @@ public class UserSkill implements SkillableUser {
        /**
         * Link to skills entity
         */
-       @JoinColumn (name = "user_skill_id", referencedColumnName = "skill_id", nullable = false, updatable = false)
+       @JoinColumn (name = "user_skill_skill_id", referencedColumnName = "skill_id", nullable = false, updatable = false)
        @OneToOne (cascade = CascadeType.REFRESH, optional = false, targetEntity = JobSkill.class)
        private Skillable jobSkill;
 
@@ -69,24 +75,118 @@ public class UserSkill implements SkillableUser {
         * When this entry has been created
         */
        @Basic (optional = false)
-       @Column (name = "user_skill_created", nullable = false, updatable = false)
+       @Column (name = "user_skill_entry_created", nullable = false, updatable = false)
+       @Temporal (TemporalType.TIMESTAMP)
+       private Date userSkillEntryCreated;
+
+       /**
+        * When this entry has been updated
+        */
+       @Column (name = "user_skill_entry_updated", insertable = false)
        @Temporal (TemporalType.TIMESTAMP)
-       private Date userSkillCreated;
+       private Date userSkillEntryUpdated;
 
        /**
         * Id number (primary key)
         */
        @Id
        @GeneratedValue (strategy = GenerationType.IDENTITY)
-       @Column (name = "user_skill_entry_id", nullable = false, updatable = false)
+       @Column (name = "user_skill_id", nullable = false, updatable = false)
        private Long userSkillId;
 
        /**
-        * When this entry has been updated
+        * Default constructor, required for the EJB
         */
-       @Column (name = "user_skill_updated", insertable = false)
-       @Temporal (TemporalType.TIMESTAMP)
-       private Date userSkillUpdated;
+       public UserSkill () {
+               // Empty by default
+       }
+
+       /**
+        * Constructor with all required entity properties
+        * <p>
+        * @param jobSkill  An instance of a Skillable class
+        * @param skillUser An instance of a User class
+        */
+       public UserSkill (final Skillable jobSkill, final User skillUser) {
+               // Invoke default constructor
+               this();
+
+               // Validate parameter
+               if (null == jobSkill) {
+                       // Throw NPE
+                       throw new NullPointerException("jobSkill is null"); //NOI18N
+               } else if (jobSkill.getSkillId() == null) {
+                       // Throw it again
+                       throw new NullPointerException("jobSill.skillId is null"); //NOI18N
+               } else if (jobSkill.getSkillId() < 1) {
+                       // Throw IAE
+                       throw new IllegalArgumentException(MessageFormat.format("jobSill.skillId={0} is invalid", jobSkill.getSkillId())); //NOI18N
+               } else if (null == skillUser) {
+                       // Throw NPE
+                       throw new NullPointerException("skillUser is null"); //NOI18N
+               } else if (skillUser.getUserId() == null) {
+                       // Throw it agin
+                       throw new NullPointerException("skillUser.userId is null"); //NOI18N
+               } else if (skillUser.getUserId() < 1) {
+                       // Throw IAE
+                       throw new NullPointerException(MessageFormat.format("skillUser.userId={0} is invalid", skillUser.getUserId())); //NOI18N
+               }
+
+               // Set fields
+               this.jobSkill = jobSkill;
+               this.skillUser = skillUser;
+       }
+
+       @Override
+       public int compareTo (final SkillableUser user) {
+               // Checkparameter and return 0 if equal
+               if (null == user) {
+                       // Should not happen
+                       throw new NullPointerException("Parameter 'user' is null"); //NOI18N
+               } else if (Objects.equals(this, user)) {
+                       // Same object
+                       return 0;
+               }
+
+               // Init comparitors
+               final int comparitors[] = {
+                       // First compare user
+                       UserUtils.compare(this.getSkillUser(), user.getSkillUser()),
+                       // Next skill
+                       SkillUtils.compare(this.getJobSkill(), user.getJobSkill()),
+                       // Primary key
+                       SafeNumberUtils.compare(this.getUserSkillId(), user.getUserSkillId())
+               };
+
+               // Check all values
+               final int comparison = ComparableUtils.checkAll(comparitors);
+
+               // Return value
+               return comparison;
+       }
+
+       @Override
+       public boolean equals (final Object object) {
+               if (this == object) {
+                       return true;
+               } else if (object == null) {
+                       return false;
+               } else if (getClass() != object.getClass()) {
+                       return false;
+               }
+
+               final SkillableUser skillableUser = (SkillableUser) object;
+
+               if (!Objects.equals(this.getJobSkill(), skillableUser.getJobSkill())) {
+                       return false;
+               } else if (!Objects.equals(this.getSkillUser(), skillableUser.getSkillUser())) {
+                       return false;
+               } else if (!Objects.equals(this.getUserSkillId(), skillableUser.getUserSkillId())) {
+                       return false;
+               }
+
+               return true;
+       }
 
        @Override
        public Skillable getJobSkill () {
@@ -110,14 +210,26 @@ public class UserSkill implements SkillableUser {
 
        @Override
        @SuppressWarnings ("ReturnOfDateField")
-       public Date getUserSkillCreated () {
-               return this.userSkillCreated;
+       public Date getUserSkillEntryCreated () {
+               return this.userSkillEntryCreated;
+       }
+
+       @Override
+       @SuppressWarnings ("AssignmentToDateFieldFromParameter")
+       public void setUserSkillEntryCreated (final Date userSkillEntryCreated) {
+               this.userSkillEntryCreated = userSkillEntryCreated;
+       }
+
+       @Override
+       @SuppressWarnings ("ReturnOfDateField")
+       public Date getUserSkillEntryUpdated () {
+               return this.userSkillEntryUpdated;
        }
 
        @Override
        @SuppressWarnings ("AssignmentToDateFieldFromParameter")
-       public void setUserSkillCreated (final Date userSkillCreated) {
-               this.userSkillCreated = userSkillCreated;
+       public void setUserSkillEntryUpdated (final Date userSkillEntryUpdated) {
+               this.userSkillEntryUpdated = userSkillEntryUpdated;
        }
 
        @Override
@@ -131,15 +243,14 @@ public class UserSkill implements SkillableUser {
        }
 
        @Override
-       @SuppressWarnings ("ReturnOfDateField")
-       public Date getUserSkillUpdated () {
-               return this.userSkillUpdated;
-       }
+       public int hashCode () {
+               int hash = 7;
 
-       @Override
-       @SuppressWarnings ("AssignmentToDateFieldFromParameter")
-       public void setUserSkillUpdated (final Date userSkillUpdated) {
-               this.userSkillUpdated = userSkillUpdated;
+               hash = 17 * hash + Objects.hashCode(this.getJobSkill());
+               hash = 17 * hash + Objects.hashCode(this.getSkillUser());
+               hash = 17 * hash + Objects.hashCode(this.getUserSkillId());
+
+               return hash;
        }
 
 }