/*
- * 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
*/
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;
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
/**
* 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;
* 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 () {
@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
}
@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;
}
}