View Javadoc

1   package com.leonarduk.clearcheckbook.dto;
2   
3   import java.util.ArrayList;
4   import java.util.Arrays;
5   import java.util.Map;
6   
7   import org.apache.log4j.Logger;
8   
9   import com.leonarduk.clearcheckbook.ClearcheckbookException;
10  
11  /***
12   * 
13   * 
14   * 
15   * @author Stephen Leonard
16   * @since 28 Jan 2014
17   * 
18   * @version $Author:: $: Author of last commit
19   * @version $Rev:: $: Revision of last commit
20   * @version $Date:: $: Date of last commit
21   * 
22   */
23  public class ReminderDataType extends AbstractDataType<ReminderDataType> {
24  
25  	public enum Fields {
26  		ID, TITLE, START_DATE, END_DATE, NOTIFY, NOTIFY_TIME, REPEAT, REPEAT_EVERY_NUM, REPEAT_EVERY, FLOATS, FLOATS_EVERY_NUM, FLOATS_EVERY, TRANS_AMOUNT, TRANS_DESCRIPTION, TRANS_TRANSACTION_TYPE, TRANS_ACCOUNT_ID, TRANS_CATEGORY_ID, TRANS_TRANSFERTOACCOUNT, TRANS_CHECK_NUM, TRANS_MEMO, TRANS_PAYEE, START_YEAR, OCCUR_FLOATING, EMAIL, EMAILDAYS, START_MONTH, START_DAY, END_YEAR, END_MONTH, END_DAY, OCCUR_ONCE, OCCUR_REPEATING, TRANS_ACCOUNTFROM, TRANS_ACCOUNTTO, REMINDER_ID, TRANSACTION;
27  	}
28  
29  	@Override
30  	protected Enum<?>[] getFields() {
31  		return Fields.values();
32  	}
33  
34  	public ReminderDataType(Map<String, String> map) {
35  		super(map);
36  		setValue(Fields.ID, getId());
37  		setEnd_Date(getEnd_date());
38  		setStart_day(getStart_day());
39  		setStart_month(getStart_month());
40  		setStart_year(getStart_year());
41  	}
42  
43  	private ReminderDataType() {
44  		super();
45  	}
46  
47  	private static final Logger _logger = Logger
48  			.getLogger(ReminderDataType.class);
49  
50  	@Override
51  	protected Enum<?>[] getInsertFields() {
52  		return new Fields[] { Fields.ID, Fields.TITLE, Fields.START_DATE,
53  				Fields.END_DATE, Fields.NOTIFY, Fields.NOTIFY_TIME,
54  				Fields.REPEAT, Fields.REPEAT_EVERY_NUM, Fields.REPEAT_EVERY,
55  				Fields.FLOATS, Fields.FLOATS_EVERY_NUM, Fields.FLOATS_EVERY,
56  				Fields.TRANS_AMOUNT, Fields.TRANS_DESCRIPTION,
57  				Fields.TRANS_TRANSACTION_TYPE, Fields.TRANS_ACCOUNT_ID,
58  				Fields.TRANS_CATEGORY_ID, Fields.TRANS_TRANSFERTOACCOUNT,
59  				Fields.TRANS_CHECK_NUM, Fields.TRANS_MEMO, Fields.TRANS_PAYEE };
60  	}
61  
62  	public static ReminderDataType create(String title, Boolean email,
63  			Integer emailDays, Integer start_year, String start_month,
64  			String start_day, Integer end_year, Integer end_month,
65  			Integer end_day, Boolean occur_once, Boolean occur_repeating,
66  			Boolean occur_floating, Integer repeat_every,
67  			Integer repeat_evey_num, Integer float_every_num,
68  			Integer float_every, TransactionDataType transactionDataType)
69  			throws ClearcheckbookException {
70  		ReminderDataType reminderDataType = new ReminderDataType();
71  		reminderDataType.setTitle(title);
72  		reminderDataType.setEmail(email);
73  		reminderDataType.setEmailDays(emailDays);
74  		reminderDataType.setStart_date(start_year + "-" + start_month + "-"
75  				+ start_day);
76  		reminderDataType
77  				.setEnd_Date(end_year + "-" + end_month + "-" + end_day);
78  		reminderDataType.setOccur_once(occur_once);
79  		reminderDataType.setOccur_repeating(occur_repeating);
80  		reminderDataType.setOccur_floating(occur_floating);
81  		reminderDataType.setFloat_every(float_every);
82  		reminderDataType.setFloat_every_num(float_every_num);
83  		reminderDataType.setTransactionDataType(transactionDataType);
84  		_logger.debug("createUserDataType: " + reminderDataType);
85  
86  		return reminderDataType;
87  	}
88  
89  	private void setStart_date(String string) {
90  		setValue(Fields.START_DATE, string);
91  	}
92  
93  	/***
94  	 * since the getall method uses reminder_id not id, need to fix the data
95  	 */
96  	@Override
97  	public ParsedNameValuePair getIdParameter() {
98  		String id = getValue(Fields.ID);
99  		if (id == null) {
100 			id = getValue(Fields.REMINDER_ID);
101 		}
102 		return new ParsedNameValuePair(Fields.ID.name().toLowerCase(), id);
103 	}
104 
105 	public String getTitle() {
106 		return getValue(Fields.TITLE);
107 	}
108 
109 	public void setTitle(String title) {
110 		setValue(Fields.TITLE, title);
111 	}
112 
113 	public String getEnd_date() {
114 		String nonNullValue = getNonNullValue(Fields.END_DATE);
115 		if (nonNullValue.length() > 10) {
116 			return nonNullValue.substring(0, 10);
117 		}
118 		return nonNullValue;
119 	}
120 
121 	public void setEnd_Date(String date) {
122 		setValue(Fields.END_DATE, date);
123 	}
124 
125 	public Boolean getEmail() {
126 		return getBooleanValue(Fields.EMAIL);
127 	}
128 
129 	public void setEmail(Boolean email) {
130 		setValue(Fields.EMAIL, email);
131 	}
132 
133 	public Integer getEmailDays() {
134 		return getIntegerValue(Fields.EMAILDAYS);
135 
136 	}
137 
138 	public void setEmailDays(Integer emailDays) {
139 		setValue(Fields.EMAILDAYS, emailDays);
140 	}
141 
142 	public String getStart_date() {
143 		return getValue(Fields.START_DATE);
144 	}
145 
146 	public Integer getStart_year() {
147 		String date = getStart_date();
148 		if (null == date) {
149 			return null;
150 		}
151 		return Integer.valueOf(date.substring(0, 4));
152 	}
153 
154 	public void setStart_year(Integer start_year) {
155 		setValue(Fields.START_YEAR, start_year);
156 	}
157 
158 	public String getStart_month() {
159 		String date = getStart_date();
160 		if (null == date) {
161 			return null;
162 		}
163 		return date.substring(5, 7);
164 	}
165 
166 	public void setStart_month(String string) {
167 		setValue(Fields.START_MONTH, string);
168 	}
169 
170 	public String getStart_day() {
171 		String date = getStart_date();
172 		if (null == date) {
173 			return null;
174 		}
175 		return date.substring(8, 10);
176 	}
177 
178 	public void setStart_day(String string) {
179 		setValue(Fields.START_DAY, string);
180 	}
181 
182 	public Integer getEnd_year() {
183 		return getIntegerValue(Fields.END_YEAR);
184 	}
185 
186 	public void setEnd_year(Integer end_year) {
187 		setValue(Fields.END_YEAR, end_year);
188 	}
189 
190 	public Integer getEnd_month() {
191 		return getIntegerValue(Fields.END_MONTH);
192 	}
193 
194 	public void setEnd_month(Integer end_month) {
195 		setValue(Fields.END_MONTH, end_month);
196 	}
197 
198 	public Integer getEnd_day() {
199 		return getIntegerValue(Fields.END_DAY);
200 	}
201 
202 	public void setEnd_day(Integer end_day) {
203 		setValue(Fields.END_DAY, end_day);
204 	}
205 
206 	public Boolean isOccur_once() {
207 		return getBooleanValue(Fields.OCCUR_ONCE);
208 	}
209 
210 	public void setOccur_once(Boolean occur_once) {
211 		setValue(Fields.OCCUR_ONCE, occur_once);
212 	}
213 
214 	public Boolean isOccur_repeating() {
215 		return getBooleanValue(Fields.OCCUR_REPEATING);
216 	}
217 
218 	public void setOccur_repeating(Boolean occur_repeating) {
219 		setValue(Fields.OCCUR_REPEATING, occur_repeating);
220 	}
221 
222 	public Boolean isOccur_floating() {
223 		return getBooleanValue(Fields.OCCUR_FLOATING);
224 	}
225 
226 	public void setOccur_floating(Boolean occur_floating) {
227 		setValue(Fields.OCCUR_FLOATING, occur_floating);
228 	}
229 
230 	public Integer getRepeat_every() {
231 		return getIntegerValue(Fields.REPEAT_EVERY);
232 	}
233 
234 	public void setRepeat_every(Integer repeat_every) {
235 		setValue(Fields.REPEAT_EVERY, repeat_every);
236 	}
237 
238 	public Integer getRepeat_evey_num() {
239 		return getIntegerValue(Fields.REPEAT_EVERY_NUM);
240 	}
241 
242 	public void setRepeat_evey_num(Integer repeat_evey_num) {
243 		setValue(Fields.REPEAT_EVERY_NUM, repeat_evey_num);
244 	}
245 
246 	public Integer getFloat_every_num() {
247 		return getIntegerValue(Fields.FLOATS_EVERY_NUM);
248 	}
249 
250 	public void setFloat_every_num(Integer float_every_num) {
251 		setValue(Fields.FLOATS_EVERY_NUM, float_every_num);
252 	}
253 
254 	public Integer getFloat_every() {
255 		return getIntegerValue(Fields.FLOATS_EVERY);
256 	}
257 
258 	public void setFloat_every(Integer float_every) {
259 		setValue(Fields.FLOATS_EVERY, float_every);
260 	}
261 
262 	/***
263 	 * Converts all the "trans_" fields to a TransactionDataType object
264 	 * 
265 	 * @return
266 	 * @throws ClearcheckbookException
267 	 */
268 	public TransactionDataType getTransactionDataType()
269 			throws ClearcheckbookException {
270 		Boolean jive = false;
271 		String date = null;
272 		TransactionDataType transactionDataType = TransactionDataType.create(
273 				date, getDoubleValue(Fields.TRANS_AMOUNT),
274 				getLongValue(Fields.TRANS_ACCOUNT_ID),
275 				getLongValue(Fields.TRANS_CATEGORY_ID),
276 				getValue(Fields.TRANS_DESCRIPTION), jive,
277 				getLongValue(Fields.TRANS_ACCOUNTFROM),
278 				getLongValue(Fields.TRANS_ACCOUNTTO),
279 				getValue(Fields.TRANS_CHECK_NUM), getValue(Fields.TRANS_MEMO),
280 				getValue(Fields.TRANS_PAYEE));
281 
282 		return transactionDataType;
283 	}
284 
285 	/***
286 	 * Converts the {@link TransactionDataType} object into the fields expected,
287 	 * ie the ones starting "trans_".
288 	 * 
289 	 * @param transactionDataType
290 	 * @throws ClearcheckbookException
291 	 */
292 	public void setTransactionDataType(TransactionDataType transactionDataType)
293 			throws ClearcheckbookException {
294 		setValue(Fields.TRANS_AMOUNT, transactionDataType.getAmount());
295 		setValue(Fields.TRANS_TRANSACTION_TYPE,
296 				transactionDataType.getTransactionType());
297 		setValue(Fields.TRANS_ACCOUNT_ID, transactionDataType.getAccountId());
298 		setValue(Fields.TRANS_CATEGORY_ID, transactionDataType.getCategoryId());
299 		setValue(Fields.TRANS_DESCRIPTION, transactionDataType.getDescription());
300 		setValue(Fields.TRANS_ACCOUNTFROM,
301 				transactionDataType.getFromAccountId());
302 		setValue(Fields.TRANS_ACCOUNTTO, transactionDataType.getToAccount());
303 		setValue(Fields.TRANS_CHECK_NUM, transactionDataType.getCheckNum());
304 		setValue(Fields.TRANS_MEMO, transactionDataType.getMemo());
305 		setValue(Fields.TRANS_PAYEE, transactionDataType.getPayee());
306 	}
307 
308 	public Boolean getOccur_once() {
309 		return getBooleanValue(Fields.OCCUR_ONCE);
310 	}
311 
312 	public Boolean getOccur_repeating() {
313 		return getBooleanValue(Fields.OCCUR_REPEATING);
314 	}
315 
316 	public Boolean getOccur_floating() {
317 		return getBooleanValue(Fields.OCCUR_FLOATING);
318 	}
319 
320 	@Override
321 	protected Enum<?>[] getEditFields() {
322 		return new Enum[] { Fields.ID, Fields.TITLE, Fields.EMAIL,
323 				Fields.EMAILDAYS, Fields.START_YEAR, Fields.START_MONTH,
324 				Fields.START_DAY, Fields.END_YEAR, Fields.END_MONTH,
325 				Fields.END_DATE, Fields.OCCUR_ONCE, Fields.OCCUR_REPEATING,
326 				Fields.OCCUR_FLOATING, Fields.REPEAT_EVERY,
327 				Fields.REPEAT_EVERY_NUM, Fields.FLOATS_EVERY,
328 				Fields.FLOATS_EVERY_NUM, Fields.TRANSACTION,
329 				Fields.TRANS_AMOUNT, Fields.TRANS_DESCRIPTION,
330 				Fields.TRANS_PAYEE, Fields.TRANS_MEMO, Fields.TRANS_CHECK_NUM,
331 				Fields.TRANS_ACCOUNT_ID, Fields.TRANS_CATEGORY_ID,
332 				Fields.TRANS_TRANSACTION_TYPE, Fields.TRANS_ACCOUNTFROM,
333 				Fields.TRANS_ACCOUNTTO };
334 	}
335 
336 	/***
337 	 * There are some issues with Reminder data: reminder_id is used instead of
338 	 * id in get all. Email not given by get or getall
339 	 */
340 	@SuppressWarnings("rawtypes")
341 	@Override
342 	protected ArrayList<Enum> getFieldsToIgnoreInEqualsMethod() {
343 		return new ArrayList<Enum>(Arrays.asList(new Enum[] { Fields.EMAIL,
344 				Fields.REMINDER_ID }));
345 	}
346 }