public static void main(String[] args) throws Exception {

        BudgetFormData formData = new BudgetFormData();
        formData.setSubmittedOn(new Date());
        formData.setSalary(new BigDecimal("2000"));

        List<CoreBudgetItem> coreBudgetItemList = new ArrayList<CoreBudgetItem>();
        coreBudgetItemList.add(new CoreBudgetItem("Rent", new BigDecimal("665")));
        coreBudgetItemList.add(new CoreBudgetItem("Council Tax", new BigDecimal("65")));
        // set core budget items
        formData.setCoreBudgetItemsList(coreBudgetItemList);

        List<SocialBudgetItem> socialBudgetItems = new ArrayList<SocialBudgetItem>();
        socialBudgetItems.add(new SocialBudgetItem(new Date(), "BOF Birthday", new BigDecimal("120")));
        socialBudgetItems.add(new SocialBudgetItem(new Date(), "Essex Reunion", new BigDecimal("120")));
        // set social budget items
        formData.setSocialBudgetItemsList(socialBudgetItems);

        Budget budget = budgetFactory.requestBudgetByType("ANNUAL");

        // call buildBudget() method
        try {
            budget.buildBudget(formData);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(budget.toString());

        CalculateBudgetBreakdown breakdown = new CalculateBudgetBreakdown();
        breakdown.setBudgetCalculation(new BudgetCalculation());

        BudgetBreakdown budgetBreakdown = null;

        try {
            budgetBreakdown = breakdown.calculateBreakdown(budget, new BudgetBreakdown());
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println(budgetBreakdown.toString());

    }