1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.moneywise.quicken.file;
18
19 import java.util.EnumMap;
20 import java.util.Iterator;
21 import java.util.List;
22 import java.util.Map;
23 import java.util.Map.Entry;
24
25 import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurity;
26 import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseSecurityClass;
27 import io.github.tonywasher.joceanus.moneywise.quicken.definitions.MoneyWiseQSecurityLineType;
28 import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFStringLine;
29
30
31
32
33 public class MoneyWiseQIFSecurity
34 extends MoneyWiseQIFRecord<MoneyWiseQSecurityLineType>
35 implements Comparable<MoneyWiseQIFSecurity> {
36
37
38
39 protected static final String QIF_ITEM = "Security";
40
41
42
43
44 protected static final Map<MoneyWiseSecurityClass, String> QIF_ACTCATMAP = createClassMap();
45
46
47
48
49 private final String theName;
50
51
52
53
54 private final String theSymbol;
55
56
57
58
59 private final MoneyWiseSecurityClass theClass;
60
61
62
63
64
65
66
67 public MoneyWiseQIFSecurity(final MoneyWiseQIFFile pFile,
68 final MoneyWiseSecurity pSecurity) {
69
70 super(pFile, MoneyWiseQSecurityLineType.class);
71
72
73 theName = pSecurity.getName();
74 theSymbol = pSecurity.getSymbol();
75 theClass = pSecurity.getCategoryClass();
76
77
78 addLine(new MoneyWiseQIFSecurityNameLine(theName));
79 addLine(new MoneyWiseQIFSecuritySymbolLine(theSymbol));
80 addLine(new MoneyWiseQIFSecurityTypeLine(theClass));
81 }
82
83
84
85
86
87
88
89 protected MoneyWiseQIFSecurity(final MoneyWiseQIFFile pFile,
90 final List<String> pLines) {
91
92 super(pFile, MoneyWiseQSecurityLineType.class);
93
94
95 String myName = null;
96 String mySymbol = null;
97 MoneyWiseSecurityClass myClass = null;
98
99
100 final Iterator<String> myIterator = pLines.iterator();
101 while (myIterator.hasNext()) {
102 final String myLine = myIterator.next();
103
104
105 final MoneyWiseQSecurityLineType myType = MoneyWiseQSecurityLineType.parseLine(myLine);
106 if (myType != null) {
107
108 final String myData = myLine.substring(myType.getSymbol().length());
109
110
111 switch (myType) {
112 case NAME:
113 addLine(new MoneyWiseQIFSecurityNameLine(myData));
114 myName = myData;
115 break;
116 case SYMBOL:
117 addLine(new MoneyWiseQIFSecuritySymbolLine(myData));
118 mySymbol = myData;
119 break;
120 case SECTYPE:
121 final MoneyWiseQIFSecurityTypeLine myQLine = new MoneyWiseQIFSecurityTypeLine(myData);
122 addLine(myQLine);
123 myClass = myQLine.getSecurityClass();
124 break;
125 default:
126 break;
127 }
128 }
129 }
130
131
132 theName = myName;
133 theSymbol = mySymbol;
134 theClass = myClass;
135 }
136
137 @Override
138 public String toString() {
139 return getName();
140 }
141
142
143
144
145
146
147 public String getName() {
148 return theName;
149 }
150
151
152
153
154
155
156 public String getSymbol() {
157 return theSymbol;
158 }
159
160
161
162
163
164
165 private static Map<MoneyWiseSecurityClass, String> createClassMap() {
166
167 final Map<MoneyWiseSecurityClass, String> myMap = new EnumMap<>(MoneyWiseSecurityClass.class);
168
169
170 myMap.put(MoneyWiseSecurityClass.SHARES, "Share");
171 myMap.put(MoneyWiseSecurityClass.GROWTHUNITTRUST, "Unit/Inv. Trust");
172 myMap.put(MoneyWiseSecurityClass.INCOMEUNITTRUST, "Unit/Inv. Trust");
173 myMap.put(MoneyWiseSecurityClass.LIFEBOND, "Bond");
174 myMap.put(MoneyWiseSecurityClass.ASSET, "Asset");
175 myMap.put(MoneyWiseSecurityClass.ENDOWMENT, "Trust");
176 myMap.put(MoneyWiseSecurityClass.VEHICLE, "Vehicle");
177 myMap.put(MoneyWiseSecurityClass.PROPERTY, "Real Estate");
178
179
180 return myMap;
181 }
182
183 @Override
184 public int compareTo(final MoneyWiseQIFSecurity pThat) {
185 return theName.compareTo(pThat.getName());
186 }
187
188
189
190
191 public class MoneyWiseQIFSecurityNameLine
192 extends MoneyWiseQIFStringLine<MoneyWiseQSecurityLineType> {
193
194
195
196
197
198 protected MoneyWiseQIFSecurityNameLine(final String pName) {
199
200 super(pName);
201 }
202
203 @Override
204 public MoneyWiseQSecurityLineType getLineType() {
205 return MoneyWiseQSecurityLineType.NAME;
206 }
207
208
209
210
211
212
213 public String getName() {
214 return getValue();
215 }
216 }
217
218
219
220
221 public class MoneyWiseQIFSecuritySymbolLine
222 extends MoneyWiseQIFStringLine<MoneyWiseQSecurityLineType> {
223
224
225
226
227
228 protected MoneyWiseQIFSecuritySymbolLine(final String pSymbol) {
229
230 super(pSymbol);
231 }
232
233 @Override
234 public MoneyWiseQSecurityLineType getLineType() {
235 return MoneyWiseQSecurityLineType.SYMBOL;
236 }
237
238
239
240
241
242
243 public String getSymbol() {
244 return getValue();
245 }
246 }
247
248
249
250
251 public class MoneyWiseQIFSecurityTypeLine
252 extends MoneyWiseQIFStringLine<MoneyWiseQSecurityLineType> {
253
254
255
256 private final MoneyWiseSecurityClass theClass;
257
258
259
260
261
262
263 protected MoneyWiseQIFSecurityTypeLine(final MoneyWiseSecurityClass pClass) {
264
265 super(QIF_ACTCATMAP.get(pClass));
266
267
268 theClass = pClass;
269 }
270
271
272
273
274
275
276 protected MoneyWiseQIFSecurityTypeLine(final String pType) {
277
278 super(pType);
279
280
281 MoneyWiseSecurityClass myClass = null;
282 final Iterator<Entry<MoneyWiseSecurityClass, String>> myIterator = QIF_ACTCATMAP.entrySet().iterator();
283 while (myIterator.hasNext()) {
284 final Entry<MoneyWiseSecurityClass, String> myEntry = myIterator.next();
285
286
287 if (pType.equals(myEntry.getValue())) {
288 myClass = myEntry.getKey();
289 break;
290 }
291 }
292
293
294 theClass = myClass;
295 }
296
297 @Override
298 public MoneyWiseQSecurityLineType getLineType() {
299 return MoneyWiseQSecurityLineType.SECTYPE;
300 }
301
302 @Override
303 public String toString() {
304 return theClass.toString();
305 }
306
307
308
309
310
311
312 public MoneyWiseSecurityClass getSecurityClass() {
313 return theClass;
314 }
315 }
316 }