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.sheets;
18  
19  import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicDataType;
20  import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
21  import io.github.tonywasher.joceanus.prometheus.security.PrometheusSecurityPasswordManager;
22  import io.github.tonywasher.joceanus.prometheus.sheets.PrometheusSheetDataItem;
23  import io.github.tonywasher.joceanus.prometheus.sheets.PrometheusSheetReader;
24  import io.github.tonywasher.joceanus.tethys.api.thread.TethysUIThreadStatusReport;
25  
26  /**
27   * SheetReader extension for MoneyWiseData.
28   *
29   * @author Tony Washer
30   */
31  public class MoneyWiseReader
32          extends PrometheusSheetReader {
33      /**
34       * Constructor.
35       *
36       * @param pReport      the report
37       * @param pPasswordMgr the password manager
38       */
39      public MoneyWiseReader(final TethysUIThreadStatusReport pReport,
40                             final PrometheusSecurityPasswordManager pPasswordMgr) {
41          /* Call super-constructor */
42          super(pReport, pPasswordMgr);
43      }
44  
45      /**
46       * Register sheets.
47       */
48      @Override
49      protected void registerSheets() {
50          /* Loop through the static types */
51          for (MoneyWiseStaticDataType myType : MoneyWiseStaticDataType.values()) {
52              /* Create the sheet */
53              addSheet(newSheet(myType));
54          }
55  
56          /* Loop through the basic types */
57          for (MoneyWiseBasicDataType myType : MoneyWiseBasicDataType.values()) {
58              /* Create the sheet */
59              addSheet(newSheet(myType));
60          }
61      }
62  
63      /**
64       * Create new sheet of required type.
65       *
66       * @param pDataType the data type
67       * @return the new sheet
68       */
69      private PrometheusSheetDataItem<?> newSheet(final MoneyWiseStaticDataType pDataType) {
70          /* Switch on data Type */
71          return switch (pDataType) {
72              case DEPOSITTYPE -> new MoneyWiseSheetDepositCategoryType(this);
73              case CASHTYPE -> new MoneyWiseSheetCashCategoryType(this);
74              case LOANTYPE -> new MoneyWiseSheetLoanCategoryType(this);
75              case PORTFOLIOTYPE -> new MoneyWiseSheetPortfolioType(this);
76              case PAYEETYPE -> new MoneyWiseSheetPayeeType(this);
77              case SECURITYTYPE -> new MoneyWiseSheetSecurityType(this);
78              case TRANSTYPE -> new MoneyWiseSheetTransCategoryType(this);
79              case ACCOUNTINFOTYPE -> new MoneyWiseSheetAccountInfoType(this);
80              case TRANSINFOTYPE -> new MoneyWiseSheetTransInfoType(this);
81              case CURRENCY -> new MoneyWiseSheetCurrency(this);
82              case TAXBASIS -> new MoneyWiseSheetTaxBasis(this);
83              default -> throw new IllegalArgumentException(pDataType.toString());
84          };
85      }
86  
87      /**
88       * Create new sheet of required type.
89       *
90       * @param pDataType the data type
91       * @return the new sheet
92       */
93      private PrometheusSheetDataItem<?> newSheet(final MoneyWiseBasicDataType pDataType) {
94          /* Switch on data Type */
95          return switch (pDataType) {
96              case TRANSTAG -> new MoneyWiseSheetTransTag(this);
97              case REGION -> new MoneyWiseSheetRegion(this);
98              case DEPOSITCATEGORY -> new MoneyWiseSheetDepositCategory(this);
99              case CASHCATEGORY -> new MoneyWiseSheetCashCategory(this);
100             case LOANCATEGORY -> new MoneyWiseSheetLoanCategory(this);
101             case TRANSCATEGORY -> new MoneyWiseSheetTransCategory(this);
102             case EXCHANGERATE -> new MoneyWiseSheetExchangeRate(this);
103             case PAYEE -> new MoneyWiseSheetPayee(this);
104             case PAYEEINFO -> new MoneyWiseSheetPayeeInfo(this);
105             case SECURITY -> new MoneyWiseSheetSecurity(this);
106             case SECURITYPRICE -> new MoneyWiseSheetSecurityPrice(this);
107             case SECURITYINFO -> new MoneyWiseSheetSecurityInfo(this);
108             case DEPOSIT -> new MoneyWiseSheetDeposit(this);
109             case DEPOSITRATE -> new MoneyWiseSheetDepositRate(this);
110             case DEPOSITINFO -> new MoneyWiseSheetDepositInfo(this);
111             case CASH -> new MoneyWiseSheetCash(this);
112             case CASHINFO -> new MoneyWiseSheetCashInfo(this);
113             case LOAN -> new MoneyWiseSheetLoan(this);
114             case LOANINFO -> new MoneyWiseSheetLoanInfo(this);
115             case PORTFOLIO -> new MoneyWiseSheetPortfolio(this);
116             case PORTFOLIOINFO -> new MoneyWiseSheetPortfolioInfo(this);
117             case TRANSACTION -> new MoneyWiseSheetTransaction(this);
118             case TRANSACTIONINFO -> new MoneyWiseSheetTransInfo(this);
119             default -> throw new IllegalArgumentException(pDataType.toString());
120         };
121     }
122 }