BankReference.java

package com.tradecloud.domain.model.fec;

import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import java.io.Serializable;

@Embeddable
public class BankReference implements Serializable {

    @Column(name = "bank_reference")
    private String reference;

    // For JPA only
    public BankReference() {

    }

    public BankReference(String reference) {
        this.reference = reference;
    }

    public static BankReference valueOf(String reference) {
        Validate.notEmpty(reference, "Reference may not be null or empty");
        Validate.isTrue(reference.length() < 80, "String too Long for a Bank Reference");
        return new BankReference(reference);
    }

    public String getReference() {
        return reference;
    }

    @Override
    public BankReference clone() {
        return BankReference.valueOf(reference);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (!(o instanceof BankReference))
            return false;

        BankReference that = (BankReference) o;

        return new EqualsBuilder().append(reference, that.getReference()).isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder().append(reference).toHashCode();
    }

    @Override
    public String toString() {
        return reference;
    }
}