org.mifos.ui.core.controller.FundTransferFormBean.java Source code

Java tutorial

Introduction

Here is the source code for org.mifos.ui.core.controller.FundTransferFormBean.java

Source

/*
 * Copyright (c) 2005-2011 Grameen Foundation USA
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * See also http://www.apache.org/licenses/LICENSE-2.0.html for an
 * explanation of the license and how it is applied.
 */
package org.mifos.ui.core.controller;

import java.io.Serializable;
import java.math.BigDecimal;

import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.mifos.clientportfolio.loan.ui.DateValidator;
import org.springframework.binding.message.Message;
import org.springframework.binding.message.MessageBuilder;
import org.springframework.binding.message.MessageContext;
import org.springframework.binding.message.MessageResolver;
import org.springframework.binding.validation.ValidationContext;

public class FundTransferFormBean implements Serializable {
    private static final long serialVersionUID = 1199468781413161456L;

    private static final String ERROR_MANDATORY = "errors.mandatory";
    private static final String ERROR_INVALID_DATE = "errors.invaliddate";
    private static final String ERROR_INVALID_AMOUNT = "error.penalty.incorrectDouble";
    private static final String ERROR_FUTURE_DATE = "errors.futuredate";
    private static final String ERROR_NOT_ENOUGH_BALANCE = "fundTransfer.error.notEnough";

    private static final String DATE_OF_TRXN = "Savings.dateOfTrxn";
    private static final String RECEIPT_DATE = "Savings.receiptDate";
    private static final String AMOUNT = "Amount";

    private static final String TRXN_DATE_SOURCE = "trxnDateDD";
    private static final String AMOUNT_SOURCE = "amount";
    private static final String RECEIPT_DATE_SOURCE = "receiptDateDD";

    private BigDecimal amount;

    private BigDecimal sourceBalance;
    private BigDecimal targetBalance;
    private String sourceGlobalAccNum;
    private String targetGlobalAccNum;

    private String trxnDateDD;
    private String trxnDateMM;
    private String trxnDateYY;

    private String receiptDateDD;
    private String receiptDateMM;
    private String receiptDateYY;

    private String receiptId;

    private boolean afterInit;

    private transient DateValidator dateValidator;

    private transient boolean amountBindingError = false;

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public String getTrxnDateDD() {
        return trxnDateDD;
    }

    public void setTrxnDateDD(String trxnDateDD) {
        this.trxnDateDD = trxnDateDD;
    }

    public String getTrxnDateMM() {
        return trxnDateMM;
    }

    public void setTrxnDateMM(String trxnDateMM) {
        this.trxnDateMM = trxnDateMM;
    }

    public String getTrxnDateYY() {
        return trxnDateYY;
    }

    public void setTrxnDateYY(String trxnDateYY) {
        this.trxnDateYY = trxnDateYY;
    }

    public String getReceiptDateDD() {
        return receiptDateDD;
    }

    public void setReceiptDateDD(String receiptDateDD) {
        this.receiptDateDD = receiptDateDD;
    }

    public String getReceiptDateMM() {
        return receiptDateMM;
    }

    public void setReceiptDateMM(String receiptDateMM) {
        this.receiptDateMM = receiptDateMM;
    }

    public String getReceiptDateYY() {
        return receiptDateYY;
    }

    public void setReceiptDateYY(String receiptDateYY) {
        this.receiptDateYY = receiptDateYY;
    }

    public String getReceiptId() {
        return receiptId;
    }

    public void setReceiptId(String receiptId) {
        this.receiptId = receiptId;
    }

    public BigDecimal getSourceBalance() {
        return sourceBalance;
    }

    public void setSourceBalance(BigDecimal sourceBalance) {
        this.sourceBalance = sourceBalance;
    }

    public BigDecimal getTargetBalance() {
        return targetBalance;
    }

    public void setTargetBalance(BigDecimal targetBalance) {
        this.targetBalance = targetBalance;
    }

    public boolean isAfterInit() {
        return afterInit;
    }

    public void setAfterInit(boolean afterInit) {
        this.afterInit = afterInit;
    }

    public String getSourceGlobalAccNum() {
        return sourceGlobalAccNum;
    }

    public void setSourceGlobalAccNum(String sourceGlobalAccNum) {
        this.sourceGlobalAccNum = sourceGlobalAccNum;
    }

    public String getTargetGlobalAccNum() {
        return targetGlobalAccNum;
    }

    public void setTargetGlobalAccNum(String targetGlobalAccNum) {
        this.targetGlobalAccNum = targetGlobalAccNum;
    }

    public LocalDate getTrxnDate() {
        LocalDate date = null;
        if (isTrxnDateEntered()) {
            Integer day = Integer.parseInt(trxnDateDD);
            Integer month = Integer.parseInt(trxnDateMM);
            Integer year = Integer.parseInt(trxnDateYY);
            date = new LocalDate(year, month, day);
        }
        return date;
    }

    public void setTrxnDate(LocalDate date) {
        if (date == null) {
            trxnDateDD = "";
            trxnDateMM = "";
            trxnDateYY = "";
        } else {
            trxnDateDD = String.valueOf(date.getDayOfMonth());
            trxnDateMM = String.valueOf(date.getMonthOfYear());
            trxnDateYY = String.valueOf(date.getYear());
        }
    }

    public LocalDate getReceiptDate() {
        LocalDate date = null;
        if (isReceiptDateEntered()) {
            Integer day = Integer.parseInt(receiptDateDD);
            Integer month = Integer.parseInt(receiptDateMM);
            Integer year = Integer.parseInt(receiptDateYY);
            date = new LocalDate(year, month, day);
        }
        return date;
    }

    public void setReceiptDate(LocalDate date) {
        if (date == null) {
            receiptDateDD = "";
            receiptDateMM = "";
            receiptDateYY = "";
        } else {
            receiptDateDD = String.valueOf(date.getDayOfMonth());
            receiptDateMM = String.valueOf(date.getMonthOfYear());
            receiptDateYY = String.valueOf(date.getYear());
        }
    }

    public void validateEnterDetailsStep(ValidationContext context) {
        amountBindingError = false;
        MessageContext messageContext = context.getMessageContext();

        handleBindingErrors(messageContext);
        validateTrxnDate(messageContext);
        validateReceiptDate(messageContext);
        validateAmount(messageContext);
    }

    private void handleBindingErrors(MessageContext context) {
        if (context.hasErrorMessages()) {
            Message[] messages = context.getAllMessages();
            context.clearMessages();

            for (Message message : messages) {
                if (message.getSource().equals(AMOUNT_SOURCE)) {
                    context.addMessage(getErrorMsg(ERROR_INVALID_AMOUNT, AMOUNT_SOURCE, AMOUNT));
                    amountBindingError = true;
                }
            }
        }
    }

    private void validateTrxnDate(MessageContext context) {
        if (!isTrxnDateEntered()) { // NOPMD
            context.addMessage(getErrorMsg(ERROR_MANDATORY, TRXN_DATE_SOURCE, DATE_OF_TRXN));
        } else if (!getDateValidator().formsValidDate(trxnDateDD, trxnDateMM, trxnDateYY)) { // NOPMD
            context.addMessage(getErrorMsg(ERROR_INVALID_DATE, TRXN_DATE_SOURCE, DATE_OF_TRXN));
        } else if (getDateValidator().isFutureDate(getTrxnDate())) {
            context.addMessage(getErrorMsg(ERROR_FUTURE_DATE, TRXN_DATE_SOURCE, DATE_OF_TRXN));
        }
    }

    private void validateReceiptDate(MessageContext context) {
        if (isReceiptDateEntered()) {
            if (!getDateValidator().formsValidDate(receiptDateDD, receiptDateMM, receiptDateYY)) { // NOPMD
                context.addMessage(getErrorMsg(ERROR_INVALID_DATE, RECEIPT_DATE_SOURCE, RECEIPT_DATE));
            } else if (getDateValidator().isFutureDate(getReceiptDate())) {
                context.addMessage(getErrorMsg(ERROR_FUTURE_DATE, RECEIPT_DATE_SOURCE, RECEIPT_DATE));
            }
        }
    }

    private void validateAmount(MessageContext context) {
        if (!amountBindingError) {
            if (amount == null) {
                context.addMessage(getErrorMsg(ERROR_MANDATORY, AMOUNT_SOURCE, AMOUNT));
            } else if (amount.max(BigDecimal.ZERO).equals(BigDecimal.ZERO)) {
                context.addMessage(getErrorMsg(ERROR_INVALID_AMOUNT, AMOUNT_SOURCE, AMOUNT));
            } else if (sourceBalance.subtract(amount).doubleValue() < 0) {
                context.addMessage(getErrorMsg(ERROR_NOT_ENOUGH_BALANCE, AMOUNT_SOURCE));
            }
        }
    }

    private MessageResolver getErrorMsg(String messageKey, String source) {
        return getErrorMsg(messageKey, source, null);
    }

    private MessageResolver getErrorMsg(String messageKey, String source, String resolvableArg) {
        MessageBuilder mb = new MessageBuilder().error().source(source).code(messageKey);
        if (resolvableArg != null) {
            mb.resolvableArg(resolvableArg);
        }
        return mb.build();
    }

    public boolean isReceiptDateEntered() {
        return StringUtils.isNotBlank(receiptDateDD) || StringUtils.isNotBlank(receiptDateMM)
                || StringUtils.isNotBlank(receiptDateYY);
    }

    public boolean isTrxnDateEntered() {
        return StringUtils.isNotBlank(trxnDateDD) || StringUtils.isNotBlank(trxnDateMM)
                || StringUtils.isNotBlank(trxnDateYY);
    }

    private DateValidator getDateValidator() {
        if (dateValidator == null) {
            dateValidator = new DateValidator();
        }
        return dateValidator;
    }
}