PublicHolidayRule.java

package com.tradecloud.domain.configuration;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.model.NonBusinessDayRecalculationType;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.annotations.ForeignKey;

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

@Entity
@Table(name = "publicholidayrule")
@NamedQueries({
        @NamedQuery(name = "publicholidayrule.findAll", query = "SELECT phr FROM GlobalClientConfig gcc JOIN gcc.publicHolidayRules phr")})
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "PublicHolidayRule")
public class PublicHolidayRule extends PersistenceBase {

    private static final long serialVersionUID = 1L;

    /**
     * The public holiday this rule relates to.
     */
    @XmlElement(name = "PublicHoliday")
    @OneToOne(cascade = CascadeType.ALL)
    @ForeignKey(name = "fk_publicholiday")
    @NotNull
    private PublicHoliday publicHoliday;

    /**
     * Determines if a settlement date falls on the previous or next day before/after a bank holiday.
     * Defaults to {@link NonBusinessDayRecalculationType#PREVIOUS}.
     */
    @Enumerated(value = EnumType.STRING)
    @XmlAttribute
    @NotNull
    private NonBusinessDayRecalculationType settlementRecalculationType;

    public PublicHolidayRule() {
    }

    public PublicHolidayRule(PublicHoliday publicHoliday) {
        this.publicHoliday = publicHoliday;
        this.settlementRecalculationType = NonBusinessDayRecalculationType.PREVIOUS;
    }

    public PublicHolidayRule(PublicHoliday publicHoliday, NonBusinessDayRecalculationType settlementRecalculationType) {
        this.publicHoliday = publicHoliday;
        this.settlementRecalculationType = settlementRecalculationType;
    }

    public PublicHoliday getPublicHoliday() {
        return publicHoliday;
    }

    public void setPublicHoliday(PublicHoliday publicHoliday) {
        this.publicHoliday = publicHoliday;
    }

    public NonBusinessDayRecalculationType getSettlementRecalculationType() {
        return settlementRecalculationType;
    }

    public void setSettlementRecalculationType(NonBusinessDayRecalculationType settlementRecalculationType) {
        this.settlementRecalculationType = settlementRecalculationType;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (obj == this) {
            return true;
        }
        if (obj.getClass() != getClass()) {
            return false;
        }
        PublicHolidayRule rhs = (PublicHolidayRule) obj;
        return new EqualsBuilder()
                .append(publicHoliday, rhs.publicHoliday)
                .append(settlementRecalculationType, rhs.settlementRecalculationType)
                .isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder().append(publicHoliday).append(settlementRecalculationType).hashCode();
    }

    @Override
    public String toString() {
        return new StringBuilder().append("publicHoliday=").append(publicHoliday).append(",settlementRecalculationType=")
                .append(settlementRecalculationType).toString();
    }
}