View Javadoc

1   package com.leonarduk.clearcheckbook.file;
2   
3   import java.io.IOException;
4   import java.util.LinkedList;
5   import java.util.List;
6   import java.util.Map;
7   
8   import com.google.common.base.Splitter;
9   import com.leonarduk.clearcheckbook.ClearcheckbookException;
10  import com.leonarduk.clearcheckbook.dto.TransactionDataType;
11  
12  public class TransactionFilePreprocessor implements FilePreProcessor {
13  
14  	private Long defaultAccountId;
15  	private int rowsToSkip;
16  
17  	/* (non-Javadoc)
18  	 * @see com.leonarduk.clearcheckbook.FilePreProcessor#getRowsToSkip()
19  	 */
20  	@Override
21  	public int getRowsToSkip() {
22  		return rowsToSkip;
23  	}
24  
25  	public TransactionFilePreprocessor() {
26  		this(0);
27  	}
28  
29  	public TransactionFilePreprocessor(int rowsToSkip) {
30  		this(rowsToSkip, 0L);
31  	}
32  
33  	public TransactionFilePreprocessor(Long accountId) {
34  		this(0, accountId);
35  	}
36  
37  	public TransactionFilePreprocessor(int rowsToSkip, Long accountId) {
38  		this.defaultAccountId = accountId;
39  		this.rowsToSkip = rowsToSkip;
40  	}
41  
42  	@Override
43  	public List<String> processHeaderRow(String separator, String line)
44  			throws IOException {
45  		// Read header
46  		List<String> headerFields = new LinkedList<>();
47  		Iterable<String> columnNames = Splitter.on(separator).trimResults()
48  				.split(line);
49  		for (String columnn : columnNames) {
50  
51  			headerFields.add(columnn.replace("\"", ""));
52  		}
53  		return headerFields;
54  	}
55  
56  
57  	/* (non-Javadoc)
58  	 * @see com.leonarduk.clearcheckbook.FilePreProcessor#processRow(java.util.Map)
59  	 */
60  	@Override
61  	public Map<String, String> processRow(Map<String, String> fieldsMap)
62  			throws ClearcheckbookException {
63  		fieldsMap.put(TransactionDataType.Fields.DATE.name().toLowerCase(),
64  				getDate(fieldsMap));
65  		fieldsMap.put(TransactionDataType.Fields.AMOUNT.name().toLowerCase(),
66  				getAmount(fieldsMap));
67  		fieldsMap.put(TransactionDataType.Fields.DESCRIPTION.name()
68  				.toLowerCase(), getDesription(fieldsMap));
69  		fieldsMap.put(
70  				TransactionDataType.Fields.CHECK_NUM.name().toLowerCase(),
71  				getCheckNum(fieldsMap));
72  		fieldsMap.put(TransactionDataType.Fields.MEMO.name().toLowerCase(),
73  				getMemo(fieldsMap));
74  		fieldsMap.put(TransactionDataType.Fields.PAYEE.name().toLowerCase(),
75  				getPayee(fieldsMap));
76  		fieldsMap.put(TransactionDataType.Fields.ACCOUNT_ID.name()
77  				.toLowerCase(), getAccountId(fieldsMap));
78  
79  		return fieldsMap;
80  	}
81  
82  	protected String getAccountId(Map<String, String> fieldsMap) {
83  		String accountId = fieldsMap.get(TransactionDataType.Fields.ACCOUNT_ID
84  				.name().toLowerCase());
85  		if (null == accountId || accountId.equals("0")) {
86  			accountId = String.valueOf(this.defaultAccountId);
87  		}
88  		return accountId;
89  	}
90  
91  	protected String getPayee(Map<String, String> fieldsMap) {
92  		return fieldsMap.get(TransactionDataType.Fields.PAYEE.name()
93  				.toLowerCase());
94  	}
95  
96  	protected String getMemo(Map<String, String> fieldsMap) {
97  		return fieldsMap.get(TransactionDataType.Fields.MEMO.name()
98  				.toLowerCase());
99  	}
100 
101 	protected String getCheckNum(Map<String, String> fieldsMap) {
102 		return fieldsMap.get(TransactionDataType.Fields.CHECK_NUM.name()
103 				.toLowerCase());
104 	}
105 
106 	protected String getDesription(Map<String, String> fieldsMap) {
107 		return fieldsMap.get(TransactionDataType.Fields.DESCRIPTION.name()
108 				.toLowerCase());
109 	}
110 
111 	protected String getAmount(Map<String, String> fieldsMap) {
112 		return fieldsMap.get(TransactionDataType.Fields.AMOUNT.name()
113 				.toLowerCase());
114 	}
115 
116 	protected String getDate(Map<String, String> fieldsMap)
117 			throws ClearcheckbookException {
118 		return fieldsMap.get(TransactionDataType.Fields.DATE.name()
119 				.toLowerCase());
120 	}
121 
122 	/***
123 	 * Helper function to remove all but numbers and periods
124 	 * 
125 	 * @param nextValue
126 	 * @return
127 	 */
128 	public double getDouble(String nextValue) {
129 		if (!nextValue.isEmpty()) {
130 			String number = nextValue.replaceAll("[^0-9. ]", "");
131 			return Double.valueOf(number);
132 		}
133 		return 0;
134 	}
135 }