package org.jboss.example.homeloan.data;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class LoanApplication implements Serializable {
private static final long serialVersionUID = 1L;
private int amount;
private boolean approved;
private int deposit;
private String approvedRate;
private int lengthYears;
private String explanation;
private int insuranceCost;
private Applicant applicant;
private Bankruptcy bankruptcy;
private IncomeSource income;
public LoanApplication() {
this.setApproved(false);
}
/**
* @return the amount
*/
public int getAmount() {
return amount;
}
/**
* @param amount
* the amount to set
*/
public void setAmount(int amount) {
this.amount = amount;
}
/**
* @return the approved
*/
public boolean isApproved() {
return approved;
}
/**
* @param approved
* the approved to set
*/
public void setApproved(boolean approved) {
this.approved = approved;
}
/**
* @return the deposit
*/
public int getDeposit() {
return deposit;
}
/**
* @param deposit
* the deposit to set
*/
public void setDeposit(int deposit) {
this.deposit = deposit;
}
/**
* @return the approvedRate
*/
public String getApprovedRate() {
return approvedRate;
}
/**
* @param approvedRate
* the approvedRate to set
*/
public void setApprovedRate(String approvedRate) {
this.approvedRate = approvedRate;
}
/**
* @return the lengthYears
*/
public int getLengthYears() {
return lengthYears;
}
/**
* @param lengthYears
* the lengthYears to set
*/
public void setLengthYears(int lengthYears) {
this.lengthYears = lengthYears;
}
/**
* @return the explanation
*/
public String getExplanation() {
return explanation;
}
/**
* @param explanation
* the explanation to set
*/
public void setExplanation(String explanation) {
this.explanation = explanation;
}
/**
* @return the insuranceCost
*/
public int getInsuranceCost() {
return insuranceCost;
}
/**
* @param insuranceCost
* the insuranceCost to set
*/
public void setInsuranceCost(int insuranceCost) {
this.insuranceCost = insuranceCost;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return this.getClass().getSimpleName() + ": Approved=" + this.approved
+ " Explanation=" + this.explanation + " Amount=" + this.amount
+ " Deposit=" + this.deposit + " ApprovedRate="
+ this.approvedRate + " lengthYears=" + this.lengthYears
+ " InsuranceCost=" + this.insuranceCost
+ " Applicant=" + applicant;
}
public Applicant getApplicant() {
return applicant;
}
public void setApplicant(Applicant applicant) {
this.applicant = applicant;
}
public Bankruptcy getBankruptcy() {
return bankruptcy;
}
public void setBankruptcy(Bankruptcy bankruptcy) {
this.bankruptcy = bankruptcy;
}
public IncomeSource getIncome() {
return income;
}
public void setIncome(IncomeSource income) {
this.income = income;
}
public static LoanApplication fromElement(Element element) {
LoanApplication loanApp = parseApplication(element);
IncomeSource income = parseIncome(getElement(element, "Employment"));
Applicant applicant = parseApplicant(getElement(element, "Borrower"));
if (income != null) {
loanApp.setIncome(income);
}
if (applicant != null) {
loanApp.setApplicant(applicant);
}
return loanApp;
}
private static final String APP_NS =
"http://jboss.com/demo/products/fsw/6.0/Application.xsd";
private static LoanApplication parseApplication(Element element) {
LoanApplication app = new LoanApplication();
String amount = getElementValue(element, "Amount");
if (amount != null) {
app.setAmount(Integer.parseInt(amount));
}
app.setApprovedRate(getElementValue(element, "Interest_Rate"));
String months = getElementValue(element, "Number_Of_Months");
if (months != null) {
app.setLengthYears(Integer.parseInt(months) / 12);
}
Element cashDeposit = getElement(element, "Cash_Deposit");
if (cashDeposit != null) {
String depositAmount = getElementValue(cashDeposit, "Amount");
if (amount != null) {
app.setDeposit(Integer.parseInt(depositAmount));
}
}
return app;
}
private static IncomeSource parseIncome(Element element) {
if (element == null) {
return null;
}
IncomeSource income = new IncomeSource();
String monthlyAmount = getElementValue(element, "Monthly_Income");
if (monthlyAmount != null) {
income.setMonthlyAmount(Integer.parseInt(monthlyAmount));
}
String selfEmployed = getElementValue(element, "Is_Self_Employed");
income.setSelfEmployed(Boolean.parseBoolean(selfEmployed));
return income;
}
private static Applicant parseApplicant(Element element) {
if (element == null) {
return null;
}
Applicant applicant = new Applicant();
String dob = getElementValue(element, "DOB");
if (dob != null) {
try {
applicant.setDob(new SimpleDateFormat("MM/dd/yyyy").parse(dob));
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
applicant.setFirstName(getElementValue(element, "First_Name"));
applicant.setLastName(getElementValue(element, "Last_Name"));
applicant.setStreetAddress(getElementValue(element, "Address_1"));
applicant.setPostalCode(getElementValue(element, "Postal_Code"));
applicant.setCity(getElementValue(element, "City"));
applicant.setState(getElementValue(element, "State"));
applicant.setSsn(getElementValue(element, "SSN"));
return applicant;
}
private static String getElementValue(Element parent, String elementName) {
String value = null;
NodeList nodes = parent.getElementsByTagNameNS(APP_NS, elementName);
if (nodes.getLength() > 0) {
value = nodes.item(0).getChildNodes().item(0).getNodeValue();
}
return value;
}
private static Element getElement(Element parent, String elementName) {
Element element = null;
NodeList nodes = parent.getElementsByTagNameNS(APP_NS, elementName);
if (nodes.getLength() > 0) {
element = (Element)nodes.item(0);
}
return element;
}
}