DemurrageFreePeriod.java

package com.tradecloud.domain.demurrage;

import com.tradecloud.domain.ValueLookupBase;
import com.tradecloud.domain.container.ContainerType;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.time.DateUtils;
import org.hibernate.annotations.ForeignKey;

import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.validation.constraints.NotNull;
import java.util.Date;

/**
 *
 */
@Entity
public abstract class DemurrageFreePeriod extends ValueLookupBase {

    @NotNull
    @ManyToOne
    @ForeignKey(name = "fk_containertype")
    private ContainerType containerType;

    @NotNull
    private int numberOfDays;

    public ContainerType getContainerType() {
        return containerType;
    }

    public void setContainerType(ContainerType containerType) {
        this.containerType = containerType;
    }

    public int getNumberOfDays() {
        return numberOfDays;
    }

    public void setNumberOfDays(int numberOfDays) {
        this.numberOfDays = numberOfDays;
    }

    /**
     * Utility to calculate the free period end date.
     *
     * @param date
     * @return
     */
    public Date getFreePeriodEndDate(Date date) {
        return DateUtils.addDays(date, numberOfDays);
    }

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

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