View Javadoc

1   package com.leonarduk.clearcheckbook.dto;
2   
3   import java.util.Map;
4   
5   import org.apache.log4j.Logger;
6   
7   import com.leonarduk.clearcheckbook.ClearcheckbookException;
8   import com.leonarduk.utils.NumberUtils;
9   
10  /***
11   * 
12   * 
13   * 
14   * @author Stephen Leonard
15   * @since 28 Jan 2014
16   * 
17   * @version $Author:: $: Author of last commit
18   * @version $Rev:: $: Revision of last commit
19   * @version $Date:: $: Date of last commit
20   * 
21   */
22  public class AccountDataType extends AbstractDataType<AccountDataType> {
23  
24  	private static final Logger _logger = Logger
25  			.getLogger(AccountDataType.class);
26  
27  	public enum Fields {
28  		ID, NAME, TYPE_ID, DEPOSIT, JIVE_DEPOSIT, WITHDRAWAL, JIVE_WITHDRAWAL, INITIAL_BALANCE
29  	}
30  
31  	public enum Type {
32  		UNKNOWN, CASH, CHECKING, SAVINGS, CREDIT_CARD, INVESTMENT;
33  
34  		public String toString() {
35  			return String.valueOf(ordinal());
36  		};
37  
38  		public static Type fromString(String ordinal)
39  				throws ClearcheckbookException {
40  			try {
41  				int i = Integer.valueOf(ordinal);
42  				return Type.values()[i];
43  			} catch (Exception e) {
44  				throw new ClearcheckbookException(ordinal
45  						+ " is not a valid Type", e);
46  			}
47  		}
48  
49  		public static Type fromOrdinal(int ordinal)
50  				throws ClearcheckbookException {
51  			try {
52  				return Type.values()[ordinal];
53  			} catch (Exception e) {
54  				throw new ClearcheckbookException(ordinal
55  						+ " is not a valid Type", e);
56  			}
57  		}
58  	}
59  
60  	@Override
61  	protected Enum<?>[] getEditFields() {
62  		Fields[] insertFields = new Fields[] { Fields.ID, Fields.NAME,
63  				Fields.TYPE_ID };
64  		return insertFields;
65  	}
66  
67  	@Override
68  	protected Enum<?>[] getInsertFields() {
69  		Fields[] insertFields = new Fields[] { Fields.NAME, Fields.TYPE_ID,
70  				Fields.INITIAL_BALANCE };
71  		return insertFields;
72  	}
73  
74  	public AccountDataType(Map<String, String> map) {
75  		super(map);
76  	}
77  
78  	private AccountDataType() {
79  		super();
80  	}
81  
82  	/***
83  	 * 
84  	 * @param name
85  	 * @param type_id
86  	 * @param initial_balance
87  	 * @return
88  	 */
89  	public static AccountDataType create(String name, Type type_id,
90  			double initial_balance) {
91  		AccountDataType accountDataType = new AccountDataType();
92  		accountDataType.setName(name);
93  		accountDataType.setTypeId(type_id);
94  		accountDataType.setInitialBalance(initial_balance);
95  
96  		_logger.debug("createUserDataType: " + name + " " + type_id + " "
97  				+ initial_balance + " -> " + accountDataType);
98  
99  		return accountDataType;
100 	}
101 
102 	private void setInitialBalance(double initial_balance) {
103 		setValue(Fields.INITIAL_BALANCE, initial_balance);
104 	}
105 
106 	public String getName() {
107 		return getValue(Fields.NAME);
108 	}
109 
110 	public void setName(String name) {
111 		setValue(Fields.NAME, name);
112 	}
113 
114 	public Type getTypeId() throws ClearcheckbookException {
115 		return Type.fromString(getValue(Fields.TYPE_ID));
116 	}
117 
118 	public void setTypeId(Type type_id) {
119 		setValue(Fields.TYPE_ID, type_id);
120 	}
121 
122 	public Double getDeposit() {
123 		return getDoubleValue(Fields.DEPOSIT);
124 	}
125 
126 	public void setDeposit(double value) {
127 		setValue(Fields.DEPOSIT, value);
128 	}
129 
130 	public Double getWithdrawal() {
131 		return getDoubleValue(Fields.WITHDRAWAL);
132 	}
133 
134 	/***
135 	 * Extension of the API to take the deposit - withdrawal values to give
136 	 * balance.
137 	 * 
138 	 * @return
139 	 */
140 	public Double getCurrentBalance() {
141 		return NumberUtils.formatMoney(getDeposit().doubleValue()
142 				- getWithdrawal().doubleValue());
143 	}
144 
145 	public void setWithdrawal(Double value) {
146 		setValue(Fields.WITHDRAWAL, value);
147 	}
148 
149 	public Double getJiveDeposit() {
150 		return getDoubleValue(Fields.JIVE_DEPOSIT);
151 	}
152 
153 	public Double getJiveWithdrawal() {
154 		return getDoubleValue(Fields.JIVE_WITHDRAWAL);
155 	}
156 
157 	public void setJiveDeposit(Double value) {
158 		setValue(Fields.JIVE_DEPOSIT, value);
159 	}
160 
161 	public void setJiveWithdrawal(Double value) {
162 		setValue(Fields.JIVE_WITHDRAWAL, value);
163 	}
164 
165 	@Override
166 	protected Enum<?>[] getFields() {
167 		return Fields.values();
168 	}
169 
170 }