AddedComment.java

package com.tradecloud.domain.comment;

import com.tradecloud.authentication.MultiTenantUtil;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

/**
 * @author jon
 */
@Embeddable
@Access(AccessType.FIELD)
public class AddedComment implements Serializable, AddedCommentI {

    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    @Column(nullable = false)
    protected Date addedDate;

    @NotNull
    @Column(nullable = false)
    @Size(max = 255, message = "reason cannot exceed 255 characters")
    protected String reason;

    @NotNull
    @Column(nullable = false)
    protected String commentuser;

    @OneToOne(cascade = CascadeType.ALL)
//    @Column(name = "generalsequencenumber_id")
    //A hack to have unique id in embeddable object as they cannot have own id.
    @NotNull
    protected GeneralSequenceNumber generalSequenceNumber;
    //can be any date
    protected Date commentDate;

    public AddedComment() {
        if (generalSequenceNumber == null) {
            generalSequenceNumber = new GeneralSequenceNumber();
        }
    }

    public String getCommentuser() {
        return commentuser;
    }

    public void setCommentuser(String commentuser) {
        this.commentuser = commentuser;
    }

    public AddedComment(Date addedDate, String reason) {
        this.addedDate = addedDate;
        this.reason = reason;
        this.commentuser = MultiTenantUtil.getActiveUser().getUsername();
        generalSequenceNumber = new GeneralSequenceNumber();
    }

    public AddedComment(Date addedDate, String reason, Date commentDate) {
        this.addedDate = addedDate;
        this.reason = reason;
        this.commentuser = MultiTenantUtil.getActiveUser().getUsername();
        generalSequenceNumber = new GeneralSequenceNumber();
        this.commentDate = commentDate;
    }

    @Override
    public Date getAddedDate() {
        return addedDate;
    }

    @Override
    public void setAddedDate(Date addedDate) {
        this.addedDate = addedDate;
    }

    @Override
    public String getReason() {
        return reason;
    }

    @Override
    public void setReason(String reason) {
        this.reason = reason;
    }

    @Override
    public Date getCommentDate() {
        return commentDate;
    }

    @Override
    public void setCommentDate(Date commentDate) {
        this.commentDate = commentDate;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AddedComment that = (AddedComment) o;
        return Objects.equals(generalSequenceNumber, that.generalSequenceNumber);
    }

    @Override
    public int hashCode() {
        return Objects.hash(generalSequenceNumber);
    }

    @Override
    public GeneralSequenceNumber getGeneralSequenceNumber() {
        return generalSequenceNumber;
    }

    @Override
    public void setGeneralSequenceNumber(GeneralSequenceNumber generalSequenceNumber) {
        this.generalSequenceNumber = generalSequenceNumber;
    }
}