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.clearcheckbook.dto.AccountDataType.Fields;
9   import com.leonarduk.clearcheckbook.dto.AccountDataType.Type;
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 LimitDataType extends AbstractDataType<LimitDataType> {
24  
25  	private static final Logger _logger = Logger.getLogger(LimitDataType.class);
26  
27  	public enum Fields {
28  		ID, NAME, AMOUNT, ACCOUNT_ID, CATEGORY_ID, SPENT, ROLLOVER, RESET_DAY, TRANSFER, DEPOSIT, DURATION, START_DATE, THIS_START_DATE, THIS_END_DATE, ORIGINAL_LIMIT, LIMIT_AMOUNT
29  	}
30  
31  	@Override
32  	protected Enum<?>[] getFields() {
33  		return Fields.values();
34  	}
35  
36  	public enum Duration {
37  		WEEKLY, BI_WEEKLY, MONTHLY, QUARTERLY, SEMI_ANNUALLY, ANNUALLY;
38  
39  		public String toString() {
40  			return String.valueOf(ordinal());
41  		};
42  
43  		public static Duration fromString(String ordinal)
44  				throws ClearcheckbookException {
45  			try {
46  				int i = Integer.valueOf(ordinal);
47  				return Duration.values()[i];
48  			} catch (Exception e) {
49  				throw new ClearcheckbookException(ordinal
50  						+ " is not a valid Type", e);
51  			}
52  		}
53  
54  		public static Type fromOrdinal(int ordinal)
55  				throws ClearcheckbookException {
56  			try {
57  				return Type.values()[ordinal];
58  			} catch (Exception e) {
59  				throw new ClearcheckbookException(ordinal
60  						+ " is not a valid Type", e);
61  			}
62  		}
63  	}
64  
65  	public LimitDataType(Map<String, String> map) {
66  		super(map);
67  		setStart_date(getStart_date());
68  	}
69  
70  	@Override
71  	protected Enum<?>[] getEditFields() {
72  		return new Fields[] { Fields.ID, Fields.AMOUNT, Fields.DURATION,
73  				Fields.RESET_DAY, Fields.START_DATE, Fields.ROLLOVER,
74  				Fields.TRANSFER, Fields.DEPOSIT };
75  	}
76  
77  	@Override
78  	protected Enum<?>[] getInsertFields() {
79  		return new Fields[] { Fields.ACCOUNT_ID, Fields.CATEGORY_ID,
80  				Fields.AMOUNT, Fields.DURATION, Fields.RESET_DAY,
81  				Fields.START_DATE, Fields.ROLLOVER, Fields.TRANSFER,
82  				Fields.DEPOSIT };
83  	}
84  
85  	private LimitDataType() {
86  		super();
87  	}
88  
89  	public static LimitDataType create(long accountId, long categoryId,
90  			int amount, Duration duration, int reset_day, String start_date,
91  			boolean rollover, boolean transfer, boolean deposit) {
92  		LimitDataType limitDataType = new LimitDataType();
93  		limitDataType.setAccountId(accountId);
94  		limitDataType.setCategoryId(categoryId);
95  		limitDataType.setAmount(amount);
96  		limitDataType.setDuration(duration);
97  		limitDataType.setReset_day(reset_day);
98  		limitDataType.setStart_date(start_date);
99  		limitDataType.setRollover(rollover);
100 		limitDataType.setTransfer(transfer);
101 		limitDataType.setDeposit(deposit);
102 
103 		_logger.debug("create: " + limitDataType);
104 		return limitDataType;
105 	}
106 
107 	public long getAccountId() {
108 		return getLongValue(Fields.ACCOUNT_ID);
109 	}
110 
111 	public void setAccountId(long accountId) {
112 		setValue(Fields.ACCOUNT_ID, accountId);
113 	}
114 
115 	public long getCategoryId() {
116 		return getLongValue(Fields.CATEGORY_ID);
117 	}
118 
119 	public void setCategoryId(long categoryId) {
120 		setValue(Fields.CATEGORY_ID, categoryId);
121 	}
122 
123 	public Integer getAmount() {
124 		Integer limit = getIntegerValue(Fields.AMOUNT);
125 		if (null == limit) {
126 			limit = getIntegerValue(Fields.LIMIT_AMOUNT);
127 		}
128 		return limit;
129 	}
130 
131 	public void setAmount(int amount) {
132 		setValue(Fields.AMOUNT, amount);
133 	}
134 
135 	public Duration getDuration() throws ClearcheckbookException {
136 		return Duration.fromString(getValue(Fields.DURATION));
137 	}
138 
139 	public String getDurationName() {
140 		return Duration.valueOf(getValue(Fields.DURATION)).name();
141 	}
142 
143 	public void setDuration(Duration duration) {
144 		setValue(Fields.DURATION, String.valueOf(duration.ordinal()));
145 	}
146 
147 	public int getReset_day() {
148 		return getIntegerValue(Fields.RESET_DAY);
149 	}
150 
151 	public void setReset_day(int reset_day) {
152 		setValue(Fields.RESET_DAY, reset_day);
153 	}
154 
155 	public String getStart_date() {
156 		String startDate = getValue(Fields.START_DATE);
157 		if (null == startDate) {
158 			startDate = getValue(Fields.THIS_START_DATE);
159 		}
160 		if (null != startDate) {
161 			return startDate.substring(0, 10);
162 		}
163 		return null;
164 	}
165 
166 	public String getEnd_date() {
167 		String startDate = getValue(Fields.THIS_END_DATE);
168 		return startDate;
169 	}
170 
171 	public void setStart_date(String start_date) {
172 		setValue(Fields.START_DATE, start_date);
173 	}
174 
175 	public Boolean getRollover() {
176 		return getBooleanValue(Fields.ROLLOVER);
177 	}
178 
179 	public void setRollover(boolean rollover) {
180 		setValue(Fields.ROLLOVER, rollover);
181 	}
182 
183 	public Boolean getTransfer() {
184 		return getBooleanValue(Fields.TRANSFER);
185 	}
186 
187 	public void setTransfer(boolean transfer) {
188 		setValue(Fields.TRANSFER, transfer);
189 	}
190 
191 	public Boolean getDeposit() {
192 		return getBooleanValue(Fields.DEPOSIT);
193 	}
194 
195 	public void setDeposit(boolean deposit) {
196 		setValue(Fields.DEPOSIT, deposit);
197 	}
198 }