SABSSlidingScale.java

package com.tradecloud.domain.sabs;

import com.tradecloud.domain.common.Currency;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.log4j.Logger;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlID;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;

/**
 * SABS Sliding Scale.
 */
@Entity
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlRootElement(name = "SabsSlidingScale")
@Table(name = "sabsslidingscale") //, uniqueConstraints = { @UniqueConstraint(columnNames =
//{ "effectiveDate" , "sabsSlidingScaleDescription"  }) })
@NamedQueries({
        @NamedQuery(name = "findSABSSlidingScaleById",
                query = "from SABSSlidingScale sabsslidingscale left join fetch sabsslidingscale.sabsSlidingScaleIncrement " +
                        " left join fetch sabsslidingscale.sabsSlidingScaleUnitValue left join fetch sabsslidingscale.events " +
                        "where sabsslidingscale.id=:id")})
public class SABSSlidingScale extends AbstractSABSSlidingScale implements Comparable<SABSSlidingScale> {

    public SABSSlidingScale() {
    }

    public SABSSlidingScale(SABSSlidingScaleDescription description) {
        super(description);
    }

    public SABSSlidingScale(SABSSlidingScaleDescription description, Date effectiveDate) {
        super(description, effectiveDate);
    }

    public SABSSlidingScale(SABSSlidingScaleDescription description, Date effectiveDate, Currency currency) {
        super(description, effectiveDate, currency);
    }

    private static final long serialVersionUID = 1L;

    /**
     * TODO - just using values from the parent for now.
     */
    @Override
    public int compareTo(SABSSlidingScale sABSSlidingScale) {
        if (getSabsSlidingScaleDescription() != null) {
            if (getSabsSlidingScaleDescription().compareTo(sABSSlidingScale.getSabsSlidingScaleDescription()) != 0) {
                return getSabsSlidingScaleDescription().compareTo(sABSSlidingScale.getSabsSlidingScaleDescription());
            }
        }

        if (getEffectiveDate() != null) {
            if (getEffectiveDate().compareTo(sABSSlidingScale.getEffectiveDate()) != 0) {
                return getEffectiveDate().compareTo(sABSSlidingScale.getEffectiveDate());
            }
        }

        if (getCurrency() != null) {
            if (getCurrency().compareTo(sABSSlidingScale.getCurrency()) != 0) {
                return getCurrency().compareTo(sABSSlidingScale.getCurrency());
            }
        }

        return 0;
    }

    private static transient Logger log = Logger.getLogger(SABSSlidingScale.class);

    @Override
    public String toString() {
        return new ToStringBuilder(super.toString()).toString();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof SABSSlidingScale)) {
            return false;
        }
        SABSSlidingScale other = (SABSSlidingScale) obj;
        return new EqualsBuilder().appendSuper(super.equals(obj)).isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder().appendSuper(super.hashCode()).toHashCode();
    }

    @XmlID
    public String getIdStr() {
        return String.valueOf(super.getId());
    }

}