View Javadoc
1   /*
2    * MoneyWise: Finance Application
3    * Copyright 2012-2026. Tony Washer
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6    * use this file except in compliance with the License.  You may obtain a copy
7    * of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
14   * License for the specific language governing permissions and limitations under
15   * the License.
16   */
17  package io.github.tonywasher.joceanus.moneywise.quicken.file;
18  
19  import io.github.tonywasher.joceanus.oceanus.date.OceanusDate;
20  import io.github.tonywasher.joceanus.oceanus.date.OceanusDateFormatter;
21  import io.github.tonywasher.joceanus.oceanus.decimal.OceanusDecimalParser;
22  import io.github.tonywasher.joceanus.oceanus.decimal.OceanusMoney;
23  import io.github.tonywasher.joceanus.oceanus.decimal.OceanusPrice;
24  import io.github.tonywasher.joceanus.oceanus.decimal.OceanusRatio;
25  import io.github.tonywasher.joceanus.oceanus.decimal.OceanusUnits;
26  import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
27  import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseTransaction;
28  import io.github.tonywasher.joceanus.moneywise.quicken.definitions.MoneyWiseQActionType;
29  import io.github.tonywasher.joceanus.moneywise.quicken.definitions.MoneyWiseQPortfolioLineType;
30  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFCategoryAccountLine;
31  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFCategoryLine;
32  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFClearedLine;
33  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFDateLine;
34  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFMoneyLine;
35  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFPayeeLine;
36  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFPriceLine;
37  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFRatioLine;
38  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFSecurityLine;
39  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFStringLine;
40  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFUnitsLine;
41  import io.github.tonywasher.joceanus.moneywise.quicken.file.MoneyWiseQIFLine.MoneyWiseQIFXferAccountLine;
42  
43  import java.util.List;
44  
45  /**
46   * Class representing a QIF Portfolio Event record.
47   */
48  public class MoneyWiseQIFPortfolioEvent
49          extends MoneyWiseQIFEventRecord<MoneyWiseQPortfolioLineType> {
50      /**
51       * The Date.
52       */
53      private final OceanusDate theDate;
54  
55      /**
56       * The Cleared Flag.
57       */
58      private final Boolean isCleared;
59  
60      /**
61       * The Action.
62       */
63      private final MoneyWiseQActionType theAction;
64  
65      /**
66       * Constructor.
67       *
68       * @param pFile   the QIF File
69       * @param pTrans  the transaction
70       * @param pAction the action
71       */
72      protected MoneyWiseQIFPortfolioEvent(final MoneyWiseQIFFile pFile,
73                                           final MoneyWiseTransaction pTrans,
74                                           final MoneyWiseQActionType pAction) {
75          /* Call super-constructor */
76          super(pFile, MoneyWiseQPortfolioLineType.class);
77  
78          /* Store values */
79          theDate = pTrans.getDate();
80          isCleared = pTrans.isReconciled();
81          theAction = pAction;
82  
83          /* Add the lines */
84          addLine(new MoneyWiseQIFPortfolioDateLine(theDate));
85          addLine(new MoneyWiseQIFPortfolioActionLine(theAction));
86          addLine(new MoneyWiseQIFPortfolioClearedLine(isCleared));
87  
88          /* Add the comment line if it exists */
89          final String myComment = pTrans.getComments();
90          if (myComment != null) {
91              addLine(new MoneyWiseQIFPortfolioCommentLine(myComment));
92          }
93      }
94  
95      /**
96       * Constructor.
97       *
98       * @param pFile      the QIF File
99       * @param pFormatter the Data Formatter
100      * @param pLines     the data lines
101      */
102     protected MoneyWiseQIFPortfolioEvent(final MoneyWiseQIFFile pFile,
103                                          final OceanusDataFormatter pFormatter,
104                                          final List<String> pLines) {
105         /* Call super-constructor */
106         super(pFile, MoneyWiseQPortfolioLineType.class);
107 
108         /* Determine details */
109         OceanusDate myDate = null;
110         MoneyWiseQActionType myAction = null;
111         Boolean myCleared = null;
112 
113         /* Obtain parsers */
114         final OceanusDateFormatter myDateParser = pFormatter.getDateFormatter();
115         final OceanusDecimalParser myDecParser = pFormatter.getDecimalParser();
116 
117         /* Loop through the lines */
118         for (String myLine : pLines) {
119             /* Determine the category */
120             final MoneyWiseQPortfolioLineType myType = MoneyWiseQPortfolioLineType.parseLine(myLine);
121             if (myType != null) {
122                 /* Access data */
123                 final String myData = myLine.substring(myType.getSymbol().length());
124 
125                 /* Switch on line type */
126                 switch (myType) {
127                     case DATE:
128                         final OceanusDate myDateDay = myDateParser.parseDateBase(myData, MoneyWiseQIFWriter.QIF_BASEYEAR);
129                         addLine(new MoneyWiseQIFPortfolioDateLine(myDateDay));
130                         myDate = myDateDay;
131                         break;
132                     case CLEARED:
133                         final Boolean myFlag = myData.equals(MoneyWiseQIFLine.QIF_RECONCILED);
134                         addLine(new MoneyWiseQIFPortfolioClearedLine(myFlag));
135                         myCleared = myFlag;
136                         break;
137                     case AMOUNT:
138                         OceanusMoney myMoney = myDecParser.parseMoneyValue(myData);
139                         addLine(new MoneyWiseQIFPortfolioAmountLine(myMoney));
140                         break;
141                     case COMMENT:
142                         addLine(new MoneyWiseQIFPortfolioCommentLine(myData));
143                         break;
144                     case ACTION:
145                         myAction = MoneyWiseQActionType.parseLine(myData);
146                         addLine(new MoneyWiseQIFPortfolioActionLine(myAction));
147                         break;
148                     case PRICE:
149                         final OceanusPrice myPrice = myDecParser.parsePriceValue(myData);
150                         addLine(new MoneyWiseQIFPortfolioPriceLine(myPrice));
151                         break;
152                     case COMMISSION:
153                         myMoney = myDecParser.parseMoneyValue(myData);
154                         addLine(new MoneyWiseQIFPortfolioCommissionLine(myMoney));
155                         break;
156                     case PAYEE:
157                         addLine(new MoneyWiseQIFPortfolioPayeeDescLine(myData));
158                         break;
159                     case QUANTITY:
160                         final OceanusUnits myUnits = myDecParser.parseUnitsValue(myData);
161                         addLine(new MoneyWiseQIFPortfolioQuantityLine(myUnits));
162                         break;
163                     case SECURITY:
164                         addLine(new MoneyWiseQIFPortfolioSecurityLine(pFile.getSecurity(myData)));
165                         break;
166                     case XFERACCOUNT:
167                         /* Look for account, category and classes */
168                         final MoneyWiseQIFAccount myAccount = MoneyWiseQIFXferAccountLine.parseAccount(pFile, myData);
169                         final MoneyWiseQIFEventCategory myCategory = MoneyWiseQIFCategoryLine.parseCategory(pFile, myData);
170                         List<MoneyWiseQIFClass> myClasses = MoneyWiseQIFXferAccountLine.parseAccountClasses(pFile, myData);
171                         if (myAccount == null) {
172                             myClasses = MoneyWiseQIFCategoryLine.parseCategoryClasses(pFile, myData);
173                             addLine(new MoneyWiseQIFPortfolioCategoryLine(myCategory, myClasses));
174                             convertPayee();
175                         } else if (myCategory == null) {
176                             addLine(new MoneyWiseQIFPortfolioAccountLine(myAccount, myClasses));
177                         } else {
178                             addLine(new MoneyWiseQIFPortfolioCategoryAccountLine(myCategory, myAccount, myClasses));
179                             convertPayee();
180                         }
181                         break;
182                     case XFERAMOUNT:
183                         myMoney = myDecParser.parseMoneyValue(myData);
184                         addLine(new MoneyWiseQIFPortfolioXferAmountLine(myMoney));
185                         break;
186                     default:
187                         break;
188                 }
189             }
190         }
191 
192         /* Convert any split */
193         if (MoneyWiseQActionType.STKSPLIT.equals(myAction)) {
194             convertSplit();
195         }
196 
197         /* Build details */
198         theDate = myDate;
199         theAction = myAction;
200         isCleared = myCleared;
201     }
202 
203     @Override
204     public OceanusDate getDate() {
205         return theDate;
206     }
207 
208     @Override
209     public Boolean isCleared() {
210         return isCleared;
211     }
212 
213     /**
214      * Obtain the action.
215      *
216      * @return the action.
217      */
218     public MoneyWiseQActionType getAction() {
219         return theAction;
220     }
221 
222     /**
223      * record security.
224      *
225      * @param pSecurity the security
226      */
227     protected void recordSecurity(final MoneyWiseQIFSecurity pSecurity) {
228         /* Add security line */
229         addLine(new MoneyWiseQIFPortfolioSecurityLine(pSecurity));
230     }
231 
232     /**
233      * record category.
234      *
235      * @param pCategory the category
236      */
237     protected void recordCategory(final MoneyWiseQIFEventCategory pCategory) {
238         /* Add category line */
239         addLine(new MoneyWiseQIFPortfolioCategoryLine(pCategory));
240     }
241 
242     /**
243      * record category.
244      *
245      * @param pCategory the category
246      * @param pClasses  the classes
247      */
248     protected void recordCategory(final MoneyWiseQIFEventCategory pCategory,
249                                   final List<MoneyWiseQIFClass> pClasses) {
250         /* Add category line */
251         addLine(new MoneyWiseQIFPortfolioCategoryLine(pCategory, pClasses));
252     }
253 
254     /**
255      * record amount.
256      *
257      * @param pAmount the amount
258      */
259     protected void recordAmount(final OceanusMoney pAmount) {
260         /* Add amount line */
261         addLine(new MoneyWiseQIFPortfolioAmountLine(pAmount));
262     }
263 
264     /**
265      * record payee.
266      *
267      * @param pPayee the payee
268      */
269     protected void recordPayee(final String pPayee) {
270         /* Add payee line */
271         addLine(new MoneyWiseQIFPortfolioPayeeDescLine(pPayee));
272     }
273 
274     /**
275      * record payee.
276      *
277      * @param pPayee the payee
278      */
279     protected void recordPayee(final MoneyWiseQIFPayee pPayee) {
280         /* Add payee line */
281         addLine(new MoneyWiseQIFPortfolioPayeeLine(pPayee));
282     }
283 
284     /**
285      * record transfer.
286      *
287      * @param pAccount the transfer account
288      * @param pAmount  the transfer amount
289      */
290     protected void recordXfer(final MoneyWiseQIFAccount pAccount,
291                               final OceanusMoney pAmount) {
292         /* Add transfer lines */
293         addLine(new MoneyWiseQIFPortfolioAccountLine(pAccount));
294         addLine(new MoneyWiseQIFPortfolioXferAmountLine(pAmount));
295     }
296 
297     /**
298      * record transfer.
299      *
300      * @param pAccount the transfer account
301      * @param pClasses the classes
302      * @param pAmount  the transfer amount
303      */
304     protected void recordXfer(final MoneyWiseQIFAccount pAccount,
305                               final List<MoneyWiseQIFClass> pClasses,
306                               final OceanusMoney pAmount) {
307         /* Add transfer lines */
308         addLine(new MoneyWiseQIFPortfolioAccountLine(pAccount, pClasses));
309         addLine(new MoneyWiseQIFPortfolioXferAmountLine(pAmount));
310     }
311 
312     /**
313      * record transfer.
314      *
315      * @param pCategory the transfer category
316      * @param pAmount   the transfer amount
317      */
318     protected void recordXfer(final MoneyWiseQIFEventCategory pCategory,
319                               final OceanusMoney pAmount) {
320         /* Add transfer lines */
321         addLine(new MoneyWiseQIFPortfolioCategoryLine(pCategory));
322         addLine(new MoneyWiseQIFPortfolioXferAmountLine(pAmount));
323     }
324 
325     /**
326      * record quantity.
327      *
328      * @param pQuantity the units quantity
329      */
330     protected void recordQuantity(final OceanusUnits pQuantity) {
331         /* Add quantity line */
332         addLine(new MoneyWiseQIFPortfolioQuantityLine(pQuantity));
333     }
334 
335     /**
336      * record quantity.
337      *
338      * @param pRatio the split ratio
339      */
340     protected void recordQuantity(final OceanusRatio pRatio) {
341         /* Add quantity line */
342         addLine(new MoneyWiseQIFPortfolioSplitRatioLine(pRatio));
343     }
344 
345     /**
346      * record price.
347      *
348      * @param pPrice the price
349      */
350     protected void recordPrice(final OceanusPrice pPrice) {
351         /* Add price line */
352         addLine(new MoneyWiseQIFPortfolioPriceLine(pPrice));
353     }
354 
355     /**
356      * record commission.
357      *
358      * @param pCommission the commission
359      */
360     protected void recordCommission(final OceanusMoney pCommission) {
361         /* Add commission line */
362         addLine(new MoneyWiseQIFPortfolioCommissionLine(pCommission));
363     }
364 
365     /**
366      * Convert Payee.
367      */
368     private void convertPayee() {
369         /* Look for a payee line */
370         final MoneyWiseQIFLine<MoneyWiseQPortfolioLineType> myLine = getLine(MoneyWiseQPortfolioLineType.PAYEE);
371         if (myLine instanceof MoneyWiseQIFPortfolioPayeeDescLine myDesc) {
372             /* Access payee */
373             final String myName = myDesc.getValue();
374 
375             /* Register the payee */
376             final MoneyWiseQIFPayee myPayee = getFile().registerPayee(myName);
377             addLine(new MoneyWiseQIFPortfolioPayeeLine(myPayee));
378         }
379     }
380 
381     /**
382      * Convert Split.
383      */
384     private void convertSplit() {
385         /* Look for an action line */
386         final MoneyWiseQIFLine<MoneyWiseQPortfolioLineType> myLine = getLine(MoneyWiseQPortfolioLineType.QUANTITY);
387         if (myLine instanceof MoneyWiseQIFPortfolioQuantityLine myQuantity) {
388             /* Extract action */
389             final OceanusUnits myUnits = myQuantity.getUnits();
390 
391             /* Convert to ratio line */
392             final OceanusRatio myRatio = new OceanusRatio(myUnits.toString());
393             addLine(new MoneyWiseQIFPortfolioSplitRatioLine(myRatio));
394         }
395     }
396 
397     /**
398      * The Portfolio Date line.
399      */
400     public static class MoneyWiseQIFPortfolioDateLine
401             extends MoneyWiseQIFDateLine<MoneyWiseQPortfolioLineType> {
402         /**
403          * Constructor.
404          *
405          * @param pDate the Date
406          */
407         protected MoneyWiseQIFPortfolioDateLine(final OceanusDate pDate) {
408             /* Call super-constructor */
409             super(pDate);
410         }
411 
412         @Override
413         public MoneyWiseQPortfolioLineType getLineType() {
414             return MoneyWiseQPortfolioLineType.DATE;
415         }
416     }
417 
418     /**
419      * The Portfolio Comment line.
420      */
421     public static class MoneyWiseQIFPortfolioCommentLine
422             extends MoneyWiseQIFStringLine<MoneyWiseQPortfolioLineType> {
423         /**
424          * Constructor.
425          *
426          * @param pComment the comment
427          */
428         protected MoneyWiseQIFPortfolioCommentLine(final String pComment) {
429             /* Call super-constructor */
430             super(pComment);
431         }
432 
433         @Override
434         public MoneyWiseQPortfolioLineType getLineType() {
435             return MoneyWiseQPortfolioLineType.COMMENT;
436         }
437 
438         /**
439          * Obtain Comment.
440          *
441          * @return the comment
442          */
443         public String getComment() {
444             return getValue();
445         }
446     }
447 
448     /**
449      * The Portfolio Cleared line.
450      */
451     public static class MoneyWiseQIFPortfolioClearedLine
452             extends MoneyWiseQIFClearedLine<MoneyWiseQPortfolioLineType> {
453         /**
454          * Constructor.
455          *
456          * @param pCleared is the event cleared?
457          */
458         protected MoneyWiseQIFPortfolioClearedLine(final Boolean pCleared) {
459             /* Call super-constructor */
460             super(pCleared);
461         }
462 
463         @Override
464         public MoneyWiseQPortfolioLineType getLineType() {
465             return MoneyWiseQPortfolioLineType.CLEARED;
466         }
467     }
468 
469     /**
470      * The Portfolio Amount line.
471      */
472     public static class MoneyWiseQIFPortfolioAmountLine
473             extends MoneyWiseQIFMoneyLine<MoneyWiseQPortfolioLineType> {
474         /**
475          * Constructor.
476          *
477          * @param pAmount the amount
478          */
479         protected MoneyWiseQIFPortfolioAmountLine(final OceanusMoney pAmount) {
480             /* Call super-constructor */
481             super(pAmount);
482         }
483 
484         @Override
485         public MoneyWiseQPortfolioLineType getLineType() {
486             return MoneyWiseQPortfolioLineType.AMOUNT;
487         }
488 
489         /**
490          * Obtain Amount.
491          *
492          * @return the amount
493          */
494         public OceanusMoney getAmount() {
495             return getMoney();
496         }
497     }
498 
499     /**
500      * The Portfolio Commission line.
501      */
502     public static class MoneyWiseQIFPortfolioCommissionLine
503             extends MoneyWiseQIFMoneyLine<MoneyWiseQPortfolioLineType> {
504         /**
505          * Constructor.
506          *
507          * @param pCommission the commission
508          */
509         protected MoneyWiseQIFPortfolioCommissionLine(final OceanusMoney pCommission) {
510             /* Call super-constructor */
511             super(pCommission);
512         }
513 
514         @Override
515         public MoneyWiseQPortfolioLineType getLineType() {
516             return MoneyWiseQPortfolioLineType.COMMISSION;
517         }
518 
519         /**
520          * Obtain Commission.
521          *
522          * @return the commission
523          */
524         public OceanusMoney getCommission() {
525             return getMoney();
526         }
527     }
528 
529     /**
530      * The Portfolio Price line.
531      */
532     public static class MoneyWiseQIFPortfolioPriceLine
533             extends MoneyWiseQIFPriceLine<MoneyWiseQPortfolioLineType> {
534         /**
535          * Constructor.
536          *
537          * @param pPrice the price
538          */
539         protected MoneyWiseQIFPortfolioPriceLine(final OceanusPrice pPrice) {
540             /* Call super-constructor */
541             super(pPrice);
542         }
543 
544         @Override
545         public MoneyWiseQPortfolioLineType getLineType() {
546             return MoneyWiseQPortfolioLineType.PRICE;
547         }
548     }
549 
550     /**
551      * The Portfolio Quantity line.
552      */
553     public static class MoneyWiseQIFPortfolioQuantityLine
554             extends MoneyWiseQIFUnitsLine<MoneyWiseQPortfolioLineType> {
555         /**
556          * Constructor.
557          *
558          * @param pUnits the units
559          */
560         protected MoneyWiseQIFPortfolioQuantityLine(final OceanusUnits pUnits) {
561             /* Call super-constructor */
562             super(pUnits);
563         }
564 
565         @Override
566         public MoneyWiseQPortfolioLineType getLineType() {
567             return MoneyWiseQPortfolioLineType.QUANTITY;
568         }
569     }
570 
571     /**
572      * The Portfolio Split Ratio line.
573      */
574     public static class MoneyWiseQIFPortfolioSplitRatioLine
575             extends MoneyWiseQIFRatioLine<MoneyWiseQPortfolioLineType> {
576         /**
577          * Constructor.
578          *
579          * @param pRatio the ratio
580          */
581         protected MoneyWiseQIFPortfolioSplitRatioLine(final OceanusRatio pRatio) {
582             /* Call super-constructor */
583             super(pRatio);
584         }
585 
586         @Override
587         public MoneyWiseQPortfolioLineType getLineType() {
588             return MoneyWiseQPortfolioLineType.QUANTITY;
589         }
590     }
591 
592     /**
593      * The Portfolio Action line.
594      */
595     public static class MoneyWiseQIFPortfolioActionLine
596             extends MoneyWiseQIFLine<MoneyWiseQPortfolioLineType> {
597         /**
598          * The action type.
599          */
600         private final MoneyWiseQActionType theAction;
601 
602         /**
603          * Constructor.
604          *
605          * @param pAction the action type
606          */
607         protected MoneyWiseQIFPortfolioActionLine(final MoneyWiseQActionType pAction) {
608             /* Store the data */
609             theAction = pAction;
610         }
611 
612         @Override
613         public MoneyWiseQPortfolioLineType getLineType() {
614             return MoneyWiseQPortfolioLineType.ACTION;
615         }
616 
617         /**
618          * Obtain the security.
619          *
620          * @return the security
621          */
622         public MoneyWiseQActionType getAction() {
623             return theAction;
624         }
625 
626         @Override
627         protected void formatData(final OceanusDataFormatter pFormatter,
628                                   final StringBuilder pBuilder) {
629             /* Add the action */
630             pBuilder.append(theAction.getSymbol());
631         }
632     }
633 
634     /**
635      * The Portfolio Security line.
636      */
637     public static class MoneyWiseQIFPortfolioSecurityLine
638             extends MoneyWiseQIFSecurityLine<MoneyWiseQPortfolioLineType> {
639         /**
640          * Constructor.
641          *
642          * @param pSecurity the security
643          */
644         protected MoneyWiseQIFPortfolioSecurityLine(final MoneyWiseQIFSecurity pSecurity) {
645             /* Call super-constructor */
646             super(pSecurity);
647         }
648 
649         @Override
650         public MoneyWiseQPortfolioLineType getLineType() {
651             return MoneyWiseQPortfolioLineType.SECURITY;
652         }
653     }
654 
655     /**
656      * The Portfolio Payee Account line.
657      */
658     public static class MoneyWiseQIFPortfolioPayeeLine
659             extends MoneyWiseQIFPayeeLine<MoneyWiseQPortfolioLineType> {
660         /**
661          * Constructor.
662          *
663          * @param pPayee the payee
664          */
665         protected MoneyWiseQIFPortfolioPayeeLine(final MoneyWiseQIFPayee pPayee) {
666             /* Call super-constructor */
667             super(pPayee);
668         }
669 
670         @Override
671         public MoneyWiseQPortfolioLineType getLineType() {
672             return MoneyWiseQPortfolioLineType.PAYEE;
673         }
674     }
675 
676     /**
677      * The Portfolio Payee Description line.
678      */
679     public static class MoneyWiseQIFPortfolioPayeeDescLine
680             extends MoneyWiseQIFStringLine<MoneyWiseQPortfolioLineType> {
681         /**
682          * Constructor.
683          *
684          * @param pPayee the payee description
685          */
686         protected MoneyWiseQIFPortfolioPayeeDescLine(final String pPayee) {
687             /* Call super-constructor */
688             super(pPayee);
689         }
690 
691         @Override
692         public MoneyWiseQPortfolioLineType getLineType() {
693             return MoneyWiseQPortfolioLineType.PAYEE;
694         }
695     }
696 
697     /**
698      * The Portfolio Account line.
699      */
700     public static class MoneyWiseQIFPortfolioAccountLine
701             extends MoneyWiseQIFXferAccountLine<MoneyWiseQPortfolioLineType> {
702         /**
703          * Constructor.
704          *
705          * @param pAccount the account
706          */
707         protected MoneyWiseQIFPortfolioAccountLine(final MoneyWiseQIFAccount pAccount) {
708             /* Call super-constructor */
709             super(pAccount);
710         }
711 
712         /**
713          * Constructor.
714          *
715          * @param pAccount the account
716          * @param pClasses the account classes
717          */
718         protected MoneyWiseQIFPortfolioAccountLine(final MoneyWiseQIFAccount pAccount,
719                                                    final List<MoneyWiseQIFClass> pClasses) {
720             /* Call super-constructor */
721             super(pAccount, pClasses);
722         }
723 
724         @Override
725         public MoneyWiseQPortfolioLineType getLineType() {
726             return MoneyWiseQPortfolioLineType.XFERACCOUNT;
727         }
728     }
729 
730     /**
731      * The Portfolio Category line.
732      */
733     public static class MoneyWiseQIFPortfolioCategoryLine
734             extends MoneyWiseQIFCategoryLine<MoneyWiseQPortfolioLineType> {
735         /**
736          * Constructor.
737          *
738          * @param pCategory the category
739          */
740         protected MoneyWiseQIFPortfolioCategoryLine(final MoneyWiseQIFEventCategory pCategory) {
741             /* Call super-constructor */
742             super(pCategory);
743         }
744 
745         /**
746          * Constructor.
747          *
748          * @param pCategory the category
749          * @param pClasses  the account classes
750          */
751         protected MoneyWiseQIFPortfolioCategoryLine(final MoneyWiseQIFEventCategory pCategory,
752                                                     final List<MoneyWiseQIFClass> pClasses) {
753             /* Call super-constructor */
754             super(pCategory, pClasses);
755         }
756 
757         @Override
758         public MoneyWiseQPortfolioLineType getLineType() {
759             return MoneyWiseQPortfolioLineType.XFERACCOUNT;
760         }
761     }
762 
763     /**
764      * The Portfolio Category line.
765      */
766     public static class MoneyWiseQIFPortfolioCategoryAccountLine
767             extends MoneyWiseQIFCategoryAccountLine<MoneyWiseQPortfolioLineType> {
768         /**
769          * Constructor.
770          *
771          * @param pCategory the category
772          * @param pAccount  the account
773          */
774         protected MoneyWiseQIFPortfolioCategoryAccountLine(final MoneyWiseQIFEventCategory pCategory,
775                                                            final MoneyWiseQIFAccount pAccount) {
776             /* Call super-constructor */
777             super(pCategory, pAccount);
778         }
779 
780         /**
781          * Constructor.
782          *
783          * @param pCategory the category
784          * @param pAccount  the account
785          * @param pClasses  the account classes
786          */
787         protected MoneyWiseQIFPortfolioCategoryAccountLine(final MoneyWiseQIFEventCategory pCategory,
788                                                            final MoneyWiseQIFAccount pAccount,
789                                                            final List<MoneyWiseQIFClass> pClasses) {
790             /* Call super-constructor */
791             super(pCategory, pAccount, pClasses);
792         }
793 
794         @Override
795         public MoneyWiseQPortfolioLineType getLineType() {
796             return MoneyWiseQPortfolioLineType.XFERACCOUNT;
797         }
798     }
799 
800     /**
801      * The Portfolio Transfer Amount line.
802      */
803     public static class MoneyWiseQIFPortfolioXferAmountLine
804             extends MoneyWiseQIFMoneyLine<MoneyWiseQPortfolioLineType> {
805         /**
806          * Constructor.
807          *
808          * @param pAmount the amount
809          */
810         protected MoneyWiseQIFPortfolioXferAmountLine(final OceanusMoney pAmount) {
811             /* Call super-constructor */
812             super(pAmount);
813         }
814 
815         @Override
816         public MoneyWiseQPortfolioLineType getLineType() {
817             return MoneyWiseQPortfolioLineType.XFERAMOUNT;
818         }
819 
820         /**
821          * Obtain Amount.
822          *
823          * @return the amount
824          */
825         public OceanusMoney getAmount() {
826             return getMoney();
827         }
828     }
829 }