RateLookupPriorityConfig.java

package com.tradecloud.domain.rate;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.costing.CostLineTemplate;
import org.hibernate.annotations.ForeignKey;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name = "ratelookuppriorityconfig")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "RateLookupPriorityConfig")
public class RateLookupPriorityConfig extends PersistenceBase implements Comparable<RateLookupPriorityConfig> {

    @NotNull
    @ManyToOne(optional = false)
    @ForeignKey(name = "fk_costlinetemplate")
    private CostLineTemplate costLineTemplate;

    @NotNull
    @Enumerated(EnumType.STRING)
    private RateLookupPriorityType rateLookupPriorityType;

    @NotNull
    private int priority; //0 highest priority, 1 second highest etc

    public RateLookupPriorityConfig(CostLineTemplate costLineTemplate,
                                    int priority,
                                    RateLookupPriorityType rateLookupPriorityType) {
        this.costLineTemplate = costLineTemplate;
        this.priority = priority;
        this.rateLookupPriorityType = rateLookupPriorityType;

        setId(new Long(priority));
    }

    public RateLookupPriorityConfig() {
    }

    public CostLineTemplate getCostLineTemplate() {
        return costLineTemplate;
    }

    public int getPriority() {
        return priority;
    }

    public void setCostLineTemplate(CostLineTemplate costLineTemplate) {
        this.costLineTemplate = costLineTemplate;
    }

    public void setPriority(int priority) {
        this.priority = priority;
    }

    public RateLookupPriorityType getRateLookupPriorityType() {
        return rateLookupPriorityType;
    }

    public void setRateLookupPriorityType(RateLookupPriorityType rateLookupPriorityType) {
        this.rateLookupPriorityType = rateLookupPriorityType;
    }

    @Override
    public int compareTo(RateLookupPriorityConfig o) {
        if (priority == o.getPriority())
            return 0;

        if (priority > o.getPriority())
            return 1;

        return -1;
    }

    @Override
    public int hashCode() {
        int result = super.hashCode();
        result = 31 * result + (costLineTemplate != null ? costLineTemplate.hashCode() : 0);
        result = 31 * result + (rateLookupPriorityType != null ? rateLookupPriorityType.hashCode() : 0);
        result = 31 * result + priority;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null)
            return false;
        if (!(obj instanceof RateLookupPriorityConfig)) {
            return false;
        }

        RateLookupPriorityConfig other = (RateLookupPriorityConfig) obj;

        if (other.getCostLineTemplate().equals(costLineTemplate) && other.getPriority() == priority &&
                other.getRateLookupPriorityType() == rateLookupPriorityType)
            return true;

        return false;
    }

    @Override
    public String toString() {
        return "RateLookupPriorityConfig: costLineCode '" + costLineTemplate.getCode() + "', " +
                "type '" + rateLookupPriorityType.toString() + "', " + " priority '" + priority + "'";
    }
}