BankAccount.java

package com.tradecloud.domain;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.common.Currency;
import com.tradecloud.domain.party.Bank;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.springframework.stereotype.Component;

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

@SuppressWarnings("serial")
@Entity
@Component(value = "bankaccount")
@Table(name = "bankaccount")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
public class BankAccount extends PersistenceBase implements Comparable<BankAccount> {

    @ManyToOne
    @NotNull(message = "account bank is required")
    private Bank bank;
    @NotNull(message = "account Number is required")
    private String number;
    private String description;
    @ManyToOne
    private Currency currency;

    private String swiftCode;
    private String branchCode;
    private boolean verified;
    private String accountHolderName;

    public BankAccount() {
    }

    public BankAccount(Bank bank) {
        this.bank = bank;
    }

    public BankAccount(Bank bank, String number, String description, boolean displayable, Currency currency) {
        this.bank = bank;
        this.number = number;
        this.description = description;
        this.currency = currency;
    }

    public Bank getBank() {
        return bank;
    }

    public void setBank(Bank bank) {
        this.bank = bank;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Currency getCurrency() {
        return currency;
    }

    public void setCurrency(Currency currency) {
        this.currency = currency;
    }

    public String getSwiftCode() {
        return swiftCode;
    }

    public void setSwiftCode(String swiftCode) {
        this.swiftCode = swiftCode;
    }

    public String getBranchCode() {
        return branchCode;
    }

    public void setBranchCode(String branchCode) {
        this.branchCode = branchCode;
    }

    public boolean isVerified() {
        return verified;
    }

    public void setVerified(boolean verified) {
        this.verified = verified;
    }

    public String getVerified() {
        if (isVerified()) {
            return "Verified";
        }
        return "Unverified";
    }

    @Override
    public int compareTo(BankAccount otherBank) {
        return bank.getName().compareTo(otherBank.getBank().getName());
    }

    @Override
    public int hashCode() {
        HashCodeBuilder builder = new HashCodeBuilder();
        builder.append(bank);
        builder.append(branchCode);
        builder.append(currency);
        builder.append(description);
        builder.append(number);
        builder.append(swiftCode);
        return builder.toHashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof BankAccount)) {
            return false;
        }
        BankAccount other = (BankAccount) obj;
        EqualsBuilder builder = new EqualsBuilder();
        builder.append(bank, other.bank);
        builder.append(branchCode, other.branchCode);
        builder.append(currency, other.currency);
        builder.append(description, other.description);
        builder.append(number, other.number);
        builder.append(swiftCode, other.swiftCode);
        return builder.isEquals();
    }

    public String getAccountHolderName() {
        return accountHolderName;
    }

    public void setAccountHolderName(String accountHolderName) {
        this.accountHolderName = accountHolderName;
    }
}